我有一个这样的Jenkins文件:
pipeline {
agent any
options {
buildDiscarder(logRotator(numToKeepStr: '7'))
disableConcurrentBuilds()
timeout(time: 10, unit: 'MINUTES')
timestamps()
}
stages {
stage('Admin') {
steps {
script {
try {
result = "FAIL"
} catch(error) {
result = "FAIL"
}
}
}
}
stage('Normal') {
steps {
script {
try {
sh("echo 'hi'")
} catch(error) {
}
}
}
}
}
}
如何使第一步失败并使其显示为红色,并使管道继续执行更多步骤?
我已经查看了所有的SO答案,但无法使其正常工作。
设置result = "FAIL"
不会导致该步骤失败。我该怎么做,但要继续下一步?
答案 0 :(得分:1)
您可以通过为全局詹金斯变量currentBuild
设置新值来将构建状态标记为失败。该变量具有3个状态:SUCCESS
(绿色),FAILURE
(红色)和UNSTABLE
(黄色)。 catch
应该阻止构建退出,因此您可以设置currentBuild
的状态并继续。
try {
//so something
} catch(error) {
//mark build as failed
currentBuild.result = 'FAILURE'
}
}
我认为这应该有效。遗憾的是,我没有办法验证此atm。如果它不起作用,请告诉我。
答案 1 :(得分:0)
据我所知,我们可以执行以下相同的操作。
使用脚本步骤和try-catch块
stage('someStage') {
steps {
script {
try {
//Do something
} catch (err) {
echo err
}
}
echo currentBuild.result = 'FAILURE'
}
}
您可以使用propagation:false,它在构建步骤中可用。像下面这样
stage("example") {
b = build(job: "example-job", propagate: false).result
if(b == 'FAILURE') {
echo "First job failed"
currentBuild.result = 'FAILURE' // of FAILURE
}
}
stage("test") {
build("test-job")
}
链接:
https://jenkins.io/doc/pipeline/steps/pipeline-build-step/
https://medium.com/@Lenkovits/jenkins-pipelines-and-their-dirty-secrets-1-9e535cd603f4