我有一个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',
],
]
我可以在种子作业中定义一个地图,然后我可以在管道作业中作为地图传递和访问吗?
答案 0 :(得分:1)
我使用pipeline-utility-steps插件提出了 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文件中并从那里读取它们。
虽然它有效但在某种程度上感觉不对。