我希望能够获取到我的Jenkins构建作业的结果,无论是失败(红色),不稳定(黄色)还是成功(绿色)……
如果从我的Shell脚本中返回非零值,我只能得到失败的结果。是否有任何返回代码会产生不稳定的结果?
我希望能够获取到我的Jenkins构建作业的结果,无论是失败(红色),不稳定(黄色)还是成功(绿色)……
如果从我的Shell脚本中返回非零值,我只能得到失败的结果。是否有任何返回代码会产生不稳定的结果?
更新: Jenkins的新版本支持设置不稳定(unstable)
的退出代码。更多信息请参考这里 (感谢@Pedro和@gib)
我没有测试过这个。
以下为原始回答:
不,脚本退出代码不会在Jenkins中产生不稳定(unstable)
的构建结果。
唯一设置不稳定(unstable)
的构建结果的方法是通过Jenkins进行编程。
这就是Jenkins的测试工具包部分所做的事情。
您还可以直接从脚本使用Jenkins CLI来设置当前正在执行的构建的结果。而不是返回特定的退出代码,让您的脚本执行Jenkins CLI命令。有关详细信息,请前往您自己的服务器,转到http://<your-server>/cli/command/set-build-result
还有许多插件也可以实现相同的功能,包括:
returnStatus
来实现这个功能(请参见https://dev59.com/KYLba4cB1Zd3GeqPibgV#47158087)。 - gib#!/usr/bin/env groovy
properties([
parameters([string(name: 'foo', defaultValue: 'bar', description: 'Fails job if not bar (unstable if bar)')]),
])
stage('Stage 1') {
node('parent'){
def ret = sh(
returnStatus: true, // This is the key bit!
script: '''if [ "$foo" = bar ]; then exit 2; else exit 1; fi'''
)
// ret can be any number/range, does not have to be 2.
if (ret == 2) {
currentBuild.result = 'UNSTABLE'
} else if (ret != 0) {
currentBuild.result = 'FAILURE'
// If you do not manually error the status will be set to "failed", but the
// pipeline will still run the next stage.
error("Stage 1 failed with exit code ${ret}")
}
}
}
如评论中所示,这是Jenkins团队报告的问题,已经修复并计划在2.26版中实现。有关详细信息,请参见以下问题:允许“执行shell”作业以返回“不稳定”的2
但是,似乎取决于另一个阻碍它的问题。
正如其他人所说,没有返回[退出]代码来表示“不稳定”,但是有许多方法可以采取。为了节省您阅读Jenkins文档和实验的麻烦,我在这里提供一种方法,这对我很有效。
它基于Jenkins提供的“CLI”。 CLI作为一个独立的JAR实现,可以从Jenkins本身下载。 在以下示例中,我们下载该JAR(如果尚未下载),并使用命令“set-build-result”和参数“unstable”调用它。
然后,您的脚本应以零状态退出,否则构建将失败。
当脚本构建步骤完成时,控制台日志将显示构建变为“不稳定”; 而不是在执行该CLI命令时立即发生。
unstable() {
test -f jenkins-cli.jar || wget -q ${JENKINS_URL}/jnlpJars/jenkins-cli.jar
java -jar jenkins-cli.jar set-build-result unstable
}
do-something-that-might-go-badly || unstable
exit 0
在管道中的简单方法:
try {
sh "<Whatever your command mayeth be>"
} catch (Exception e) {
// Caught a non-zero exit code
// Mark build as unstable.
currentBuild.result='UNSTABLE'
}
Any Build Step Plugin
Fail The Build Plugin
first build step: Execute command
Command: echo build_step
second build step: conditional step
Run: Not
!:Execute command
Command: echo test_step
Builder: Set the build result
Result: Unstable
change "echo test_step" to "echo_test_step" to see how it works
if BUILD fails the result is FAILED, and TEST is not runned
if BUILD succedes, TEST runs, and if fails the result is UNSTABLE
if BUILD succedes, and TEST succedes, the result is SUCCESS