gpt4 book ai didi

Jenkins 管道正在跳过 groovy 'else if' 子句

转载 作者:行者123 更新时间:2023-12-05 01:16:27 26 4
gpt4 key购买 nike

我正在我的管道中进行一些测试。我的目标是,如果存在错误文件,构建应该失败。但是,如果由于某种原因测试遇到异常并且没有写入错误或成功文件,则管道也应该失败。如果两个失败条件都不满足,我希望执行上游作业。

我在舞台上写的,最初看起来像这样:

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 脚本的结果都是假的,为什么我不输入 else if 子句?我从 here 中获取了逻辑运算符我认为应该满足它们(下面的代码是新作业管道中 shell 脚本的输出)

[new-job] Running shell script
+ ls error.txt
ls: cannot access error.txt: no such file or directory

[new-job] Running shell script
+ ls success.txt
ls: cannot access success.txt: no such file or directory

最佳答案

如果这些文件不存在,那么 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;
}
}

因为可能有其他原因导致无法找到文件(无法访问等)。

关于Jenkins 管道正在跳过 groovy 'else if' 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53615614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com