Jenkins 管道确定分支是否用于 Bitbucket 拉取请求
Jenkins pipeline determine if a branch is for Bitbucket pull request
我将 Jenkins 与 Bitbucket branch source plugin 一起使用。
一切正常,但我希望能够 run/exclude 我管道中的某些阶段,具体取决于分支是否与拉取请求相关联,例如:
pipeline {
stages {
stage('build') {
//compile
}
stage('package') {
when {
environment name: 'IS_PULL_REQUEST', value: 'true'
}
//create deployable package
}
}
}
Jenkins 知道分支何时用于 PR,因为它将源与目标合并,并且还在多分支管道页面上的拉取请求文件夹中显示该分支。
我可以在 exclude/include 个阶段的管道中使用环境变量吗?
您可以使用 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-")
}
}
在声明式管道中,您还可以在 when
指令中使用内置条件 changeRequest
来确定分支是否与拉取请求相关联。
stage('package') {
when {
changeRequest()
}
//create deployable package
}
您还可以检查拉取请求是否针对特定分支:
stage('package') {
when {
changeRequest target: 'master'
}
//create deployable package
}
我将 Jenkins 与 Bitbucket branch source plugin 一起使用。
一切正常,但我希望能够 run/exclude 我管道中的某些阶段,具体取决于分支是否与拉取请求相关联,例如:
pipeline {
stages {
stage('build') {
//compile
}
stage('package') {
when {
environment name: 'IS_PULL_REQUEST', value: 'true'
}
//create deployable package
}
}
}
Jenkins 知道分支何时用于 PR,因为它将源与目标合并,并且还在多分支管道页面上的拉取请求文件夹中显示该分支。
我可以在 exclude/include 个阶段的管道中使用环境变量吗?
您可以使用 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-")
}
}
在声明式管道中,您还可以在 when
指令中使用内置条件 changeRequest
来确定分支是否与拉取请求相关联。
stage('package') {
when {
changeRequest()
}
//create deployable package
}
您还可以检查拉取请求是否针对特定分支:
stage('package') {
when {
changeRequest target: 'master'
}
//create deployable package
}