仅在构建特定分支时,如何运行构建步骤/阶段?
例如,仅在调用分支的情况下才运行部署步骤deployment
,而其他所有都保持不变。
Answers:
在声明性管道语法中执行相同的操作,以下是一些示例:
stage('master-branch-stuff'){
agent any
when{
branch 'master'
}
steps {
echo 'run this stage - ony if the branch = master branch'
}
}
<b
stage('feature-branch-stuff') {
agent label:'test-node'
when { branch "feature/*" }
steps {
echo 'run this stage - only if the branch name started with feature/'
}
}
<b
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'
}
}
<b
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
beforeAgent true
如果条件不需要git状态来决定是否运行,则可以将指令设置为避免使代理旋转来运行条件:
when { beforeAgent true; expression { return isStageConfigured(config) } }
更新
新的WHEN条款
REF:https : //jenkins.io/blog/2018/04/09/whats-in-declarative
等于-比较两个值-字符串,变量,数字,布尔值-如果相等,则返回true。老实说,我不确定我们怎么错过之前添加的内容!您也可以使用not {equals ...}组合进行“不等于”比较。
changeRequest-以最简单的形式,如果此管道正在构建更改请求(例如GitHub拉取请求),则将返回true。您还可以针对更改请求进行更详细的检查,从而允许您询问“这是针对master分支的更改请求吗?” 以及更多。
buildingTag-一个简单的条件,仅检查Pipeline是否针对SCM中的标记而不是针对分支或特定的提交引用而运行。
标签-更详细的等效于buildingTag的标签,可让您检查标签名称本身。
when{}
条件评估为假,詹金斯也会启动指定的代理。:(
beforeAgent true
可以避免这种情况
beforeAgent
现在是解决该问题的方法。
只需使用if
和env.BRANCH_NAME
,例如:
if (env.BRANCH_NAME == "deployment") {
... do some build ...
} else {
... do something else ...
}
根据其他答案,我正在添加并行阶段方案:
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'
}
}
}
}
}
}