当前位置:  开发笔记 > 编程语言 > 正文

如何在运行shell脚本时在Jenkins中标记构建不稳定

如何解决《如何在运行shell脚本时在Jenkins中标记构建不稳定》经验,为你挑选了6个好方法。

在我正在开发的项目中,我们使用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将构建标记为不稳定而不是仅成功/失败?



1> binaryLV..:

它可以在不打印魔术字符串和使用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


有趣的解决方案.但是,如果您的Jenkins需要身份验证,则需要在其配置中设置公钥身份验证,否则任何jenkins-cli命令都将失败并显示AccessDeniedException.
+1 - 这是一个比接受的答案更好的解决方案,因为文本查找器只能搜索每个作业一个字符串,因此您只能将构建状态设置为两个值之一.
我真的很喜欢这个解决方案,为此我实现了一个ruby类,以便在我的rakefiles中轻松重用。:)
如果您使用的是无法访问主服务器的从服务器,则无法使用此功能.例如,如果Jenkins从站无法创建HTTP或HTTPS连接回服务器.
我想使用此解决方案,但在“ jenkins-cli”中已弃用“ set-build-result”。

2> Jan Hudec..:

使用Text-finder插件.

不要退出状态1(这会使构建失败),而是:

if ($build_error) print("TESTS FAILED!");

在后置构建操作中启用文本查找器,设置正则表达式以匹配您打印的消息(TESTS FAILED!)并选中该条目下的"找不到,如果找不到"复选框.


由于jenkins版本2.26,请参阅下面的答案,了解没有安装插件的选项:/sf/ask/17360801/

3> Alan Franzon..:

现代Jenkins版本(自2016年10月2.2日起)解决了这个问题:它只是Execute shell构建步骤的高级选项!

退出代码进行构建

您可以选择并设置任意退出值; 如果匹配,则构建将不稳定.只需选择一个不太可能由构建中的实际进程启动的值.


"现代Jenkins版本"意味着Jenkins 2.26或更新版本.请参阅https://issues.jenkins-ci.org/browse/JENKINS-23786.
由于这是在最新的Jenkins中实现的-这应该是一个可以接受的答案

4> poussma..:

您应该使用Jenkinsfile来包装构建脚本,并使用以下方法将当前构建标记为UNSTABLE currentBuild.result = "UNSTABLE".

   stage {
      status = /* your build command goes here */
      if (status === "MARK-AS-UNSTABLE") {
        currentBuild.result = "UNSTABLE"
      }
   }


为什么这个答案没有更多支持?这有什么问题吗(除了使用“魔术”字符串`UNSTABLE`)?看来比其他答案更直接。

5> Kalpesh Soni..:

你也应该能够使用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插件



6> Steve HHH..:

在我的工作脚本中,我有以下语句(此作业仅在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

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有