如何仅在特定分支时运行构建步骤/阶段。
即。为每个pull请求/分支运行所有内容,但如果正在构建的分支名为deployment,那么还要运行部署步骤吗?
答案 0 :(得分:96)
在声明性管道语法中做同样的事情,下面是几个例子:
stage('master-branch-stuff'){
agent any
when{
branch 'master'
}
steps {
echo 'run this stage - ony if the branch = master branch'
}
}
stage('feature-branch-stuff') {
agent label:'test-node'
when { branch "feature/*" }
steps {
echo 'run this stage - only if the branch name started with feature/'
}
}
stage('expression-branch') {
agent label:'some-node'
when {
expression {
return env.BRANCH_NAME != 'master';
}
}
steps {
echo 'run this stage - when branch is not equal to master'
}
}
stage('env-specific-stuff') {
agent label:'test-node'
when {
environment name: 'NAME', value: 'this'
}
steps {
echo 'run this stage - only if the env name and value matches'
}
}
更有效的方法 -
https://issues.jenkins-ci.org/browse/JENKINS-41187
还看看 -
https://jenkins.io/doc/book/pipeline/syntax/#when
<强>更新强>
新的WHEN条款
参考:https://jenkins.io/blog/2018/04/09/whats-in-declarative
equals - 比较两个值 - 字符串,变量,数字,布尔值 - 如果它们相等则返回true。我老实说不确定我们错过了什么 先添加这个!您可以使用not进行“not equals”比较 {equals ...}组合。
changeRequest - 以最简单的形式,如果这样,它将返回true Pipeline正在构建一个更改请求,例如GitHub拉取请求。 您还可以针对更改请求执行更详细的检查, 允许你问“这是对主人的变更请求吗? 分支?“还有更多。
buildingTag - 一个简单的条件,只检查管道是否 针对SCM中的标记运行,而不是分支或特定的 提交参考。
标签 - 更详细的buildingTag等价物,允许您检查 反对标签名称本身。
答案 1 :(得分:35)
只需使用seq
和if
,例如:
env.BRANCH_NAME
答案 2 :(得分:1)
根据其他答案,我添加了并行阶段方案:
pipeline {
agent any
stages {
stage('some parallel stage') {
parallel {
stage('parallel stage 1') {
when {
expression { ENV == "something" }
}
steps {
echo 'something'
}
}
stage('parallel stage 2') {
steps {
echo 'something'
}
}
}
}
}
}