Mar*_*ren 4 groovy jenkins jenkins-job-dsl jenkins-pipeline
我有一个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')
}
}
}
Run Code Online (Sandbox Code Playgroud)
job1.groovy和job2.groovy是标准Jenkinsfile样式管道。
我想将一些常见的地图传递给这些工作。这些包含在环境之间可能有所不同的内容,例如目标服务器、凭证名称。
就像是:
def SERVERS_MAP = [
'prod': [
'prod-server1',
'prod-server2',
],
'dev': [
'dev-server1',
'dev-server2',
],
]
Run Code Online (Sandbox Code Playgroud)
我可以在种子作业中定义一个映射,然后将其作为管道作业中的映射进行传递和访问吗?
我使用pipeline-utility-steps插件想出了一个巧妙的解决方法。
本质上,我将数据映射作为 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}", "")
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的管道将包含类似的内容:
def serversMap = readJSON text: SERVERS_MAP
def targetServers = serversMap["${ENV}"]
targetServers.each { server ->
echo server
}
Run Code Online (Sandbox Code Playgroud)
我还可以将这些变量提取到 JSON 文件中并从那里读取它们。
虽然有效,但总感觉有些不对劲。
归档时间: |
|
查看次数: |
8988 次 |
最近记录: |