詹金斯:使用分支名称

时间:2020-06-29 14:01:05

标签: jenkins jenkins-pipeline jenkins-groovy

我正在通过声明性方式使用Jenkins Pipeline,我想触发另一个具有分支名称的工作。

例如,我有两个不同的管道(PipelineA -PipelineB),分别具有阶段JobAJobB

JobA的一个阶段应使用JobB通过参数触发env.GIT_BRANCH。我的意思是,如果我们通过原点/显影触发JobA,那么它应该触发'JobB'并运行具有原点/显影条件的阶段。

同时,我们还对JobB进行了一些单独的更改,并且它还具有自己的GIT_BRANCH表达式。因此,我无法找到一种方法来单独管理该变量而不影响JobA。需要说明的是,当JobA用原点/阶段参数触发JobB时,由于JobB的最新更改是原点/展开,而GIT_BRANCH是原点/展开,我无法运行具有阶段条件的阶段。

这是我的剧本。

    stage ('Job A') {
        steps {
            script {
                echo "Triggering job for branch ${env.GIT_BRANCH}"
                ret = build(job: "selenium_tests", 
                                parameters: [
                                    string(name: "projectName", value: "Project1"),
                                    string(name: "branchName", value: "env.GIT_BRANCH")
                                ],
                                propagate: true,
                                wait: true)

                echo ret.result
                currentBuild.result = ret.result
            }           
        }
    }

parameters {    
    string(defaultValue: "project1", description: 'Which project do you want to test?', name: 'projectName')
    string(defaultValue: "origin/development", description: 'Environment for selenium tests', name:'branchName')
}


    stage ('Job B') {
        when {
            beforeAgent true
            expression { params.projectName == 'Project1' }
            expression { params.branchName == "origin/stage"}
            expression{ return env.GIT_BRANCH == "origin/stage"}
        }
        steps {
            script {
                  //Do something
            }           
        }
    }

1 个答案:

答案 0 :(得分:1)

触发作业B时再传递一个分支的参数

stage('Trigger Job A') {}

stage('Trigger Job B') {
    when {
       allOf {
         beforeAgent true
         expression { params.projectName == 'Project1' }
         expression{ return env.GIT_BRANCH == "origin/stage"}
       }
    }
    steps {
    build(job: "selenium_tests/Job B", 
      parameters: [
          string(name: "projectName", value: "Project1")
          strint(name: "branchName", value: "${env.GIT_BRANCH}")
      ],
      propagate: true,
      wait: true)       
    }
}


在Job B'Jenkinsfile中,添加一个阶段作为第一阶段以切换到所需分支

pipeline {
    
    parameters {
        string(name: 'branchName', defaultValue: 'develop')
    }

    stages {

        stage('Switch branch') {
            steps {
                sh "git checkout ${params.branchName}"
            }
        }
        // other stages

    }
}