我有一个多分支管道作业集,如果git repo有新的变化可以每分钟由Jenkinsfile构建。如果分支名称是某种格式,我有一个步骤将工件部署到环境中。我希望能够在每个分支的基础上配置环境,而无需在每次创建新的此类分支时编辑Jenkinsfile。这是我的Jenkins文件的粗略草图:
pipeline {
agent any
parameters {
string(description: "DB name", name: "dbName")
}
stages {
stage("Deploy") {
steps {
deployTo "${params.dbName}"
}
}
}
}
是否有Jenkins插件可以让我在作业配置页面中为每个分支定义dbName
参数的默认值?理想情况下类似于下面的模型:
应该能够重新排序这些值以设置优先级。插件在第一个之后停止检查匹配。匹配可以是精确的或正则表达式。
如果目前还没有这样的插件,请指出我能想到的最接近的开源插件。我可以将它作为编写自定义插件的基础。
答案 0 :(得分:1)
您可以用作自定义插件的起点的可能插件是Dynamic Parameter Plugin
答案 1 :(得分:0)
不是你的问题的答案,但可能是一种解决方法......
我不知道参数列表的其余部分是什么样的,但如果它是静态列表,您可能会使用"静态列表使用默认"选项作为第一个。
当作业运行时,如果值是"使用默认",则从存储在SCM分支中的文件中收集默认值并使用它。
答案 2 :(得分:0)
这是一种解决方法:
使用Jenkins Config File Provider plugin创建一个配置json,并在每个分支中定义参数。示例:
{
"develop": {
"dbName": "test_db",
"param2": "value"
},
"master": {
"dbName": "prod_db",
"param2": "value1"
},
"test_branch_1": {
"dbName": "zss_db",
"param2": "value2"
},
"default": {
"dbName": "prod_db",
"param2": "value3"
}
}
在您的Jenkins文件中:
final commit_data = checkout(scm)
BRANCH = commit_data['GIT_BRANCH']
configFileProvider([configFile(fileId: '{Your config file id}', variable: 'BRANCH_SETTINGS')]) {
def config = readJSON file:"$BRANCH_SETTINGS"
def branch_config = config."${BRANCH}"
if(branch_config){
echo "using config for branch ${BRANCH}"
}
else{
branch_config = config.default
}
echo branch_config.'dbName'
}
然后可以使用branch_config.'dbName'
,branch_config.'param2'
等。甚至可以将其设置为全局变量,然后在整个管道中使用。
可以通过Jenkins UI(由插件提供)轻松编辑配置文件,以在将来提供新的分支/参数。这不需要访问任何非沙箱方法。