詹金斯管道确定分支是否针对Bitbucket拉取请求

时间:2020-03-16 18:40:45

标签: jenkins jenkins-pipeline bitbucket devops

我正在将Jenkins与Bitbucket branch source plugin一起使用。

一切正常,但是我希望能够根据分支是否与拉取请求相关联来在管道中运行/排除某些阶段,例如:

pipeline {
  stages {
    stage('build') {
      //compile
    }    
    stage('package') {
      when {
        environment name: 'IS_PULL_REQUEST', value: 'true'
      }      
      //create deployable package
    }
  }
}

Jenkins知道分支何时用于PR,因为它会将源与目标合并,并在多分支管道页面的pull request文件夹中显示分支。

管道中是否可以使用环境变量来排除/包含阶段?

2 个答案:

答案 0 :(得分:5)

您可以使用BRANCH_NAMECHANGE_ID环境变量来检测拉取请求。当从分支运行多分支管道构建时(在创建拉取请求之前),将设置以下环境变量:

  • env.BRANCH_NAME设置为存储库分支名称(例如develop
  • env.CHANGE_BRANCHnull
  • env.CHANGE_IDnull

但是一旦创建拉取请求,便:

  • env.BRANCH_NAME设置为PR- \ d +名称(例如PR-11
  • env.CHANGE_BRANCH设置为真实分支名称(例如develop),
  • env.CHANGE_ID设置为拉取请求ID(例如11)。

我在管道中使用以下when条件来检测请求请求:

when {
    expression {
        // True for pull requests, false otherwise.
        env.CHANGE_ID && env.BRANCH_NAME.startsWith("PR-")
    }
}

答案 1 :(得分:2)

在声明性管道中,您还可以使用issuers指令内的内置条件changeRequest来确定分支是否与拉取请求相关联。

when

您还可以检查拉取请求是否针对特定分支:

stage('package') {
  when {
    changeRequest()
  }      
  //create deployable package
}

请参见https://jenkins.io/doc/book/pipeline/syntax/#when

相关问题