我正在尝试找到一种方法将Multibranch管道作业的配置传递到jenkins文件中。
我的目标是配置如下内容:
Branch : Server
"master" : "prodServer"
"develop" : "devServer"
"release/*", "hotfix/*" : "stagingServer"
"feature/Thing-I-Want-To-Change-Regularly" : "testingServer"
然后我可以写这样的Jenkins文件:
pipeline {
agent any
stages {
stage('Example Build') {
steps {
echo 'Hello World'
}
}
stage('Example Deploy') {
when {
//branch is in config branches
}
steps {
//deploy to server
}
}
}
}
我找不到实现这个目标的方法。 EnvInject Plugin似乎是非管道项目的解决方案,但它目前存在安全问题,只有部分管道支持。
答案 0 :(得分:1)
如果要根据分支部署到不同的服务器,可以使用Multibranch Pipelines:
when { branch 'master' }
(decalrative)
或
${env.BRANCH_NAME}
(已编写脚本)
访问您所在的分支,然后添加逻辑以根据此部署到相应的服务器。
答案 1 :(得分:0)
将我目前最好的方法发布到全局配置值并希望更好的方法出现。
在管理Jenkins - > 配置系统 - > 全局属性您可以定义可以从Jenkins作业访问的全局环境变量。定义 MY_BRANCH 变量可以从管道访问。
when { branch: MY_BRANCH }
甚至是RegEx并像这样使用
when { expression { BRANCH_NAME ==~ MY_BRANCH } }
但是,这样做的缺点是环境变量在每个Jenkins作业之间共享,而不仅仅是在单个作业的所有分支之间共享。因此需要仔细命名。