Jenkins管道正在跳过groovy';如果';条款
我正在管道中进行一些测试。我的目标是,如果存在错误文件,构建应该失败。但是,如果由于某种原因,测试遇到异常,并且没有写入错误或成功的文件,那么管道也应该失败。如果两个失败条件都不满足,我希望执行上游作业 我在舞台上写的,最初看起来是这样的:Jenkins管道正在跳过groovy';如果';条款,jenkins,groovy,jenkins-pipeline,jenkins-groovy,Jenkins,Groovy,Jenkins Pipeline,Jenkins Groovy,我正在管道中进行一些测试。我的目标是,如果存在错误文件,构建应该失败。但是,如果由于某种原因,测试遇到异常,并且没有写入错误或成功的文件,那么管道也应该失败。如果两个失败条件都不满足,我希望执行上游作业 我在舞台上写的,最初看起来是这样的: stage('system tests') { steps { dir(project_root) { def error_exists = sh( script: 'ls er
stage('system tests') {
steps {
dir(project_root) {
def error_exists = sh(
script: 'ls error.txt', returnStatus: true
)
if (error_exists == 0) {
currentBuild.result = 'FAILED'
return
}
build job: 'my-job;
}
}
}
上述代码有效。当正在执行的测试写入错误文件时,管道将失败。然后,我尝试修改代码以适应既不编写错误文件也不编写成功文件的结果
stage('system tests') {
steps {
dir(project_root) {
def error_exists = sh(
script: 'ls error.txt', returnStatus: true
)
def success_exists = sh(
script: 'ls success.txt', returnStatus: true
)
if (error_exists == 0) {
currentBuild.result = 'FAILED'
return
} else if (success_exists == 1 && error_exists == 1) {
currentBuild.result = 'FAILED'
return
}
build job: 'my-job;
}
}
}
我模拟了这样一种情况:两个文件都没有写入,管道也没有失败,而是触发了上游构建。如果两个shell脚本的结果都为false,为什么不输入else if
子句?我从中获取了逻辑运算符,我认为应该满足它们(下面的代码是新作业管道中shell脚本的输出)
如果这些文件不存在,则sh jenkins步骤返回错误代码2。你应该像这样重写你的“如果条件”:
success_exists == 2 && error_exists == 2
但是,我认为在您的情况下,此代码更适合:
stage('system tests') {
steps {
dir(project_root) {
def error_exists = sh(
script: 'ls error.txt', returnStatus: true
)
def success_exists = sh(
script: 'ls success.txt', returnStatus: true
)
if (error_exists == 0) {
currentBuild.result = 'FAILED'
return
} else if (success_exists != 0 && error_exists != 0) {
currentBuild.result = 'FAILED'
return
}
build job: 'my-job;
}
}
因为无法找到文件可能还有其他原因(缺少访问权限等)
stage('system tests') {
steps {
dir(project_root) {
def error_exists = sh(
script: 'ls error.txt', returnStatus: true
)
def success_exists = sh(
script: 'ls success.txt', returnStatus: true
)
if (error_exists == 0) {
currentBuild.result = 'FAILED'
return
} else if (success_exists != 0 && error_exists != 0) {
currentBuild.result = 'FAILED'
return
}
build job: 'my-job;
}
}