Jenkinsfile-脚本管道语法中的条件阶段执行
我们正在使用 语法,Jenkinsfile
其中定义了很多阶段来构建和部署代码。我们有一个用例,如果我要执行
运行所有阶段,但是如果需要执行一些AWS路由,则只运行一个特定阶段。我知道我可以使用if(<expression>)
跳过阶段或运行阶段。问题是我不想将这个if
条件应用于我的每个阶段Jenkinsfile
。
在新的
语法中,使用该stage..when
选项很容易实现。我们的基础架构中使用了许多自定义的Groovy帮助器函数,因此,此时我无法从 语法切换到新的 语法。我最终在现有设备上所做的Jenkinsfile
就是这样。
原始的詹金斯档案
stage('Checkout Code') {} stage('Build') {}
parallel(
stage('Sonar Analysis') {}
stage('CLM Analysis') {}
stage('Security Analysis') {}
)
stage('Build Docker Image') {}
...
...
stage('QA Deploy') {}
stage('QA Routing') {}
...
...
stage('Prod Deploy') {}
stage('Prod Routing') {}
变成
if (fullDeploy){ stage('Full Build') {
stage('Checkout Code') {}
stage('Build') {}
parallel(
stage('Sonar Analysis') {}
stage('CLM Analysis') {}
stage('Security Analysis') {}
)
stage('Build Docker Image') {}
...
...
stage('QA Deploy') {}
stage('QA Routing') {}
...
...
stage('Prod Deploy') {}
stage('Prod Routing') {}
}
}
if (routeOnly){
stage('Prod Routing') {}
}
这对我来说有点不客气,我在Jenkins文档上找不到任何提供这种方法的好方法。
有没有人有更好的方法来整合这一点?
回答:
我还不喜欢在 块的想法。我通过覆盖以下阶段解决了这个问题 *
def stage(name, execute, block) { return stage(name, execute ? block : {echo "skipped stage $name"})
}
现在您可以按以下方式禁用阶段
stage('Full Build', false) { ...
}
您还可以使用以下def标记舞台已跳过
import org.jenkinsci.plugins.pipeline.modeldefinition.Utilsdef stage(name, execute, block) {
return stage(name, execute ? block : {
echo "skipped stage $name"
Utils.markStageSkippedForConditional(STAGE_NAME)
})
}
以上是 Jenkinsfile-脚本管道语法中的条件阶段执行 的全部内容, 来源链接: utcz.com/qa/419800.html