如何在Jenkinsfile中捕获分支名称

时间:2018-07-17 07:11:32

标签: jenkins jenkins-plugins jenkins-pipeline

我在docker环境中使用Jenkins for CI-CD。 我有3个环境,并根据环境有分支。 说,开发质量检查产品

我正在使用Jenkins管道来构建图像并将其推送到DTR。

我只想检查如何在jenkinsfile中获取分支名称,以便我可以根据分支名称设置条件,以便根据分支名称来推送Docker映像,例如:

if(env.BRANCH_NAME==develop){

下面是我的Jenkins文件:

pipeline {
    agent {
       label "master"
    }

    stages {
        stage('Build') {
            steps {
                echo '..........................Building Jar..........................'
                echo 'Pulling................................................' + env.BRANCH_NAME
                sh 'npm install'

            }
        }
        stage('Build-Image') {
            steps {
                echo '..........................Building Image..........................'
                sh 'sudo docker build -t some_org_dev/some_repo:v0.1 --build-arg PORT=9007 --build-arg ENVIRONMENT=develop .'
            }
        }
        stage('Tag-Image') {
            steps {

            if(env.BRANCH_NAME==develop){
                echo '..........................Taging Image..........................'
                sh 'sudo docker login some_org_dev/some_repo -u username -p password'
                sh 'sudo docker tag some_org_dev/some_repo:v0.1 some_org/some_repo/service-portal:v0.1'
                }else if(env.BRANCH_NAME==qa){
                echo '..........................Taging Image..........................'
                sh 'sudo docker login some_org_qa/some_repo -u username -p password'
                sh 'sudo docker tag some_org_qa/some_repo:v0.1 some_org/some_repo/service-portal:v0.1'

            }
        }
        stage('Push-Image') {
            steps {
            if(env.BRANCH_NAME==develop){
                echo '..........................Pushing Image..........................'
                sh 'sudo docker push some_org_dev/some_repo:v0.1 some_org/some_repo/service-portal:v0.1'
                }
            }else if(env.BRANCH_NAME==qa){
                echo '..........................Pushing Image..........................'
                sh 'sudo docker push some_org_qa/some_repo:v0.1 some_org/some_repo/service-portal:v0.1'

            }

        }

    }
}

2 个答案:

答案 0 :(得分:1)

我相信您缺少引号,是您得到未定义的var错误吗? 试试:

if (env.BRANCH_NAME== 'develop') {\\code here}

答案 1 :(得分:0)

在多分支管道上,我使用的是以下内容:

pipeline {
  agent { label "jenkins" }

  stages {
    stage("A Stage") {
      when {
        expression { GIT_BRANCH ==~ /(develop)/ }
      }

      steps {
        sh 'deploy'
      }
    }
  }
}

如果您不使用多分支,则可能需要使用sh 'env'来查找。