将配置传递给Jenkins管道

时间:2018-05-01 12:51:26

标签: jenkins jenkins-pipeline

我正在尝试找到一种方法将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似乎是非管道项目的解决方案,但它目前存在安全问题,只有部分管道支持。

2 个答案:

答案 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作业之间共享,而不仅仅是在单个作业的所有分支之间共享。因此需要仔细命名。