在我正在开发的项目中,我们使用shell脚本来执行不同的任务.有些脚本是运行Rsync的SH/Bash,有些是PHP脚本.其中一个PHP脚本正在运行一些集成测试,这些测试输出到JUnit XML,代码覆盖率报告等.
Jenkins能够将作业标记为基于退出状态的成功/失败.在PHP中,如果在运行期间检测到测试失败,则脚本将退出1.其他shell脚本运行命令并使用其中的退出代码将构建标记为失败.
// :: End of PHP script: // If any tests have failed, fail the build if ($build_error) exit(1);
在Jenkins术语中,不稳定的构建被定义为
如果构建成功并且一个或多个发布者报告它不稳定,则构建不稳定.例如,如果配置了JUnit发布者并且测试失败,则构建将标记为不稳定.
在运行shell脚本时,如何让Jenkins将构建标记为不稳定而不是仅成功/失败?
它可以在不打印魔术字符串和使用TextFinder的情况下完成.这是关于它的一些信息.
基本上,您需要在shell脚本中提供http:// yourserver.com/cli 的.jar文件,然后您可以使用以下命令标记构建不稳定:
java -jar jenkins-cli.jar set-build-result unstable
要在错误时标记构建不稳定,您可以使用:
failing_cmd cmd_args || java -jar jenkins-cli.jar set-build-result unstable
问题是jenkins-cli.jar必须从shell脚本中获得.您可以将其放在易于访问的路径中,也可以通过job的shell脚本下载:
wget ${JENKINS_URL}jnlpJars/jenkins-cli.jar
使用Text-finder插件.
不要退出状态1(这会使构建失败),而是:
if ($build_error) print("TESTS FAILED!");
在后置构建操作中启用文本查找器,设置正则表达式以匹配您打印的消息(TESTS FAILED!
)并选中该条目下的"找不到,如果找不到"复选框.
现代Jenkins版本(自2016年10月2.2日起)解决了这个问题:它只是Execute shell构建步骤的高级选项!
您可以选择并设置任意退出值; 如果匹配,则构建将不稳定.只需选择一个不太可能由构建中的实际进程启动的值.
您应该使用Jenkinsfile来包装构建脚本,并使用以下方法将当前构建标记为UNSTABLE currentBuild.result = "UNSTABLE"
.
stage { status = /* your build command goes here */ if (status === "MARK-AS-UNSTABLE") { currentBuild.result = "UNSTABLE" } }
你也应该能够使用groovy并做textfinder做的事情
使用groovy post-build插件将构建标记为不稳定
if(manager.logContains("Could not login to FTP server")) { manager.addWarningBadge("FTP Login Failure") manager.createSummary("warning.gif").appendText("Failed to login to remote FTP Server!
", false, false, false, "red") manager.buildUnstable() }
另请参阅Groovy Postbuild插件
在我的工作脚本中,我有以下语句(此作业仅在Jenkins主服务器上运行):
# This is the condition test I use to set the build status as UNSTABLE if [ ${PERCENTAGE} -gt 80 -a ${PERCENTAGE} -lt 90 ]; then echo WARNING: disc usage percentage above 80% # Download the Jenkins CLI JAR: curl -o jenkins-cli.jar ${JENKINS_URL}/jnlpJars/jenkins-cli.jar # Set build status to unstable java -jar jenkins-cli.jar -s ${JENKINS_URL}/ set-build-result unstable fi
您可以在Jenkins wiki上看到这个以及有关设置构建状态的更多信息:https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI