Jenkins 管道确定分支是否用于 Bitbucket 拉取请求

标签 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,因为它将源与目标合并,并且还在多分支管道页面的拉取请求文件夹中显示分支。

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

最佳答案

您可以使用 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-")
        }
    }
    

    关于Jenkins 管道确定分支是否用于 Bitbucket 拉取请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60711551/

    相关文章:

    github - 如何将包含所有分支的 Git 存储库从 Bitbucket 移动到 GitHub?

    jenkins - 如何在本地编译 Jenkins Pipeline Groovy?

    grails - Grails war命令-不提示插件更新

    Jenkins 构建失败并显示 'Cannot find executable from the chosen Ant installation'

    jenkins - 动态评估 Jenkinsfile 中的选择参数

    jenkins - 如何重建Jenkins管道

    git pull 致命 : Out of memory, malloc 失败

    jenkins - 如何在依赖作业之间配置执行开始?

    jenkins - 如何解析数据,并写入 JSON 文件

    git - 将远程 repo url 从 https 更改为 ssh 安全吗?