如何在Multibranch Pipeline中设置特定于分支的配置

时间:2017-05-10 07:14:23

标签: jenkins jenkins-pipeline

我设置了Jenkins Multibranch Pipeline来构建和部署一些代码。依赖于分支,我想将代码部署到不同的机器和目录。

For any branch:
TARGET_HOST=user@ourtestingmachine
TARGET_HOST_KEY="… some key …"
TARGET_DIRECTORY="project/`encode $BRANCH_NAME`/"

For master, additionally:
TARGET_HOST=user@productionserver
TARGET_HOST_KEY="… some other key …"
TARGET_DIRECTORY="target_direcotory"

我应该在哪里存储我的TARGET_HOST配置?我想避免将这些设置与我们的源代码一起版本,因为这些设置可能会独立更改。

我的第一次尝试是在Job的配置部分设置环境变量,但在Jenkins界面中找不到任何设置。

到目前为止我考虑过的想法:

1 个答案:

答案 0 :(得分:1)

您可以在Jenkinsfile中使用groovy代码。 您的Jenkins文件可能如下所示:

def TARGET_HOST=""
def TARGET_HOST_KEY=""
def TARGET_DIRECTORY=""
node ('master') {
    stage('detect branch') {
        println("now parsing branch name:"+BRANCH_NAME)
        def branch=BRANCH_NAME
        // extract the information you need with regex
        def m=BRANCH_NAME=~ "branches/sprints/([0-9]{4})/(.*)"
        assert m instanceof java.util.regex.Matcher                                       
        if (!m) {    
            // no information match the regex, should be production
            m=BRANCH_NAME=~ "production"
            if (!m) {                                                         
                throw new RuntimeException("This branch is neather production nor recognized sprint.")
            }               
            TARGET_HOST="user@productionserver"
            TARGET_HOST_KEY="… some other key …"
            TARGET_DIRECTORY="target_direcotory"
        }
        else {
            // sprint branch matched
            TARGET_HOST="user@ourtestingmachine"
            TARGET_HOST_KEY="… some key …"
            TARGET_DIRECTORY="project-$m"
        }
    }
}

如果你不想在每个Jenkins文件中都有这个代码,你可以使用一个.groovy文件,它将由Jenkins文件导入,如下所示:

def func
stage('load script') {
    // Funktionen werden geladen
    checkout(..)
    func = load './jenkins/lib/build-functions.groovy'
}
func.setEnv(BRANCH_NAME)

问候。