我有以下Jenkinsfile
:
pipeline {
environment {
STAGING_BRANCH = 'project'
}
agent any
stages {
stage('Staging Environment') {
steps {
sh "sh /bin/create-staging-env"
}
}
when {
expression { env.CHANGE_TARGET == env.STAGING_BRANCH && env.CHANGE_ID }
}
}
}
}
条件 expression { env.CHANGE_TARGET == env.STAGING_BRANCH && env.CHANGE_ID }
仅在它是拉取请求且目标分支为 project
时才执行该阶段。
我有一个只有 1 个提交的拉取请求:
但詹金斯多次 (7) 次运行此管道:
我对附加构建的触发的猜测是,当提交被推送到另一个分支时,并且该分支有一个拉取请求。
编辑
现在我明白了为什么要创建这些构建。它们是由对目标分支 project
的提交引起的,因为目标分支因提交而改变,Jenkins 将再次执行该 PR 的管道。
然后我的问题变为,如何获取触发此管道的提交被推送到哪个分支。例如,如果提交被推送到 project
分支,我想忽略 PR 的阶段。我想做类似expression { ... && env.COMMIT_BRANCH != 'project'}
答案 0 :(得分:0)
查看阶段的 when 分支子句。您可以告诉 Jenkins 在特定分支上运行阶段并跳过阶段,例如
stage('PR stuff') {
when {
not {
branch 'project'
}
}
steps {
sh 'something '
}
}
您也可以使用 all of 和 any of 来匹配 when too 中的多个子句