我正在将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文件夹中显示分支。
管道中是否可以使用环境变量来排除/包含阶段?
答案 0 :(得分:5)
您可以使用BRANCH_NAME
和CHANGE_ID
环境变量来检测拉取请求。当从分支运行多分支管道构建时(在创建拉取请求之前),将设置以下环境变量:
env.BRANCH_NAME
设置为存储库分支名称(例如develop
)env.CHANGE_BRANCH
是null
,env.CHANGE_ID
是null
。但是一旦创建拉取请求,便:
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
}