我有一个 Jenkins Job DSL 种子作业,它调用了几个管道作业,例如
pipelineJob("job1") {
definition {
cps {
script(readFileFromWorkspace('job1.groovy'))
}
parameters {
choiceParam('ENV', ['dev', 'prod'], 'Build Environment')
}
}
}
pipelineJob("job2") {
definition {
cps {
script(readFileFromWorkspace('job2.groovy'))
}
parameters {
choiceParam('ENV', ['dev', 'prod'], 'Build Environment')
}
}
}
job1.groovy和job2.groovy是标准的Jenkinsfile样式管道。
我想在这些作业中传递一些常用的地图。这些内容可能因环境而异,例如目标服务器、凭据名称。
类似于:
def SERVERS_MAP = [
'prod': [
'prod-server1',
'prod-server2',
],
'dev': [
'dev-server1',
'dev-server2',
],
]
我可以在我的种子作业中定义一个映射,然后在我的管道作业中作为映射进行传递和访问吗?
您可以使用字符串参数传递 Map val,下游将其读取为 json 格式。
timestamps{
node("sse_lab_CI_076"){ //${execNode}
currentBuild.description="${env.NODE_NAME};"
stage("-- regression execute --"){
def test_map =
"""
{
"gerrit_patchset_commit": "aad5fce",
"build_cpu_x86_ubuntu": [
"centos_compatible_build_test",
"gdb_compatible_build_test",
"visual_profiler_compatible_build_test"
],
}
"""
build(job: 'tops_regression_down',
parameters: [string(name: 'UPSTREAM_JOB_NAME',
value: "${env.JOB_BASE_NAME}"),
string(name: 'UPSTREAM_BUILD_NUM',
value: "${env.BUILD_NUMBER}"),
string(name: 'MAP_PARAM',
value: "${test_map}"),
],
propagate: true,
wait: true)
}
}
}
timestamps{
node("sse_lab_inspur_076"){ //${execNode}
currentBuild.description="${env.NODE_NAME};"
stage('--in precondition--'){
dir('./'){
cleanWs()
println("hello world")
println("${env.MAP_PARAM}")
Map result_json = readJSON(text: "${env.MAP_PARAM}")
println(result_json)
}
}
}
}
我想出了一个使用管道实用程序步骤插件的hacky解决方法。
本质上,我将我的数据映射作为JSON传递。
所以我的种子作业可能包含:
def SERVERS_MAP = '''
{
"prod": [
"prod-server1",
"prod-server2"
],
"dev": [
"dev-server1",
"dev-server2"
]
}
'''
pipelineJob("job1") {
definition {
cps {
script(readFileFromWorkspace('job1.groovy'))
}
parameters {
choiceParam('ENV', ['dev', 'prod'], 'Build Environment')
stringParam('SERVERS_MAP', "${SERVERS_MAP}", "")
}
}
}
我的管道将包含如下内容:
def serversMap = readJSON text: SERVERS_MAP
def targetServers = serversMap["${ENV}"]
targetServers.each { server ->
echo server
}
我还可以将这些变量提取到 JSON 文件中并从那里读取它们。
虽然它有效,但不知何故感觉不对劲。
问题内容: 当前,我有一个具有不同参数的管道作业,其中此参数之一是Choice参数。这是该作业参数的config.xml输出: 现在,我可以通过传递字符串参数从管道调用此作业: 但是我无法为选择参数定义参数: 我尝试了以下方法: 但这失败并显示以下错误: 因此问题是:如何在调用其他管道作业时定义选择参数: 有人有这样的例子吗? 问题答案: 我看过一个使用以下语法的工作示例: 基本上,不要以特殊的方
我试图从流水线步骤中运行一个job-dsl脚本。一般来说,这应该是可能的,正如这里所描述的,在管道步骤中添加了以下代码片段: null 我如何知道脚本的真实位置,以及如何指定一个jobDsl作为目标,它本身位于不同的repo中?还是我完全走错了方向? 编辑 经过进一步的研究,共享库存储库被签出到“真实”工作区旁边的一个目录中,后缀为@libs,这似乎是事实。所以我认为使用以下方法是个好主意: 与此
问题内容: 我有一个运行Jenkins的节点,该节点使用Maven构建代码。Jenkins作业是声明性管道脚本。Maven需要从需要证书才能访问的私有存储库中下载依赖项。凭证存储在Jenkins凭证管理器中。 我如何将这些凭据传递给Maven,以便Maven可以使用这些凭据从私有存储库正确下载依赖项。 问题答案: 通过将Jenkins凭证注入您的环境,然后将这些凭证传递给Maven,您可以使用Je
问题内容: 已解决 :感谢S.Richmond的以下答复我需要取消所有类型的存储映射,这意味着将变量和使用后作废。 附加 :搜索此错误的人员可能有兴趣使用Jenkins管道步骤- 在此处查找更多信息。 我正在尝试使用Jenkins Pipeline从用户那里获取输入,该输入作为json字符串传递给作业。管道然后使用隔离器对此进行解析,然后选择重要信息。然后,它将使用该信息与不同的作业参数并行运行1
下面是我简单的jenkins pipeline groovy脚本,它将用这两个阶段和我们想要构建的作业创建一个管道,我希望在job configuration下的脚本中每次都更新用于构建和代码分析的作业名,方法是从用户界面中获取数据,用户将使用Eclipse提供构建作业名和代码分析作业名- jenkinsfile脚本:-
问题内容: 运行带有包含多个节点的阶段的Jenkins管道(基于Groovy),我需要将列表从stageA上NodeA上的某个文件传递到StageB上的nodeB。 在stageA NodeA中,我运行 在stageB,我跑步 到目前为止,我已经在控制台中获得了输出。 现在如何将其输出传递到文件? 不能解决问题:-( 我敢肯定这没什么大不了的,但是我已经花了几个小时来搅动互联网,但无济于事。 问题