跳过正文
  1. Posts/

Jenkins 执行 Shell 如果返回值不为0,作业(Job)停止并失败怎么办?

·393 字·1 分钟· ·
沈显鹏
作者
沈显鹏
目录

《Jenkins Tips 3》—— 每期用简短的图文描述一个 Jenkins 小技巧。

问题
#

在使用 Jenkins pipeline 时,如果 Shell 的返回值不为零(也就是 Shell 命令执行时有错误),Jenkins Job 默认会标记当前的 stage 为失败。因此整个 Job 也会失败。

在有些时候我们希望 Shell 虽然执行失败返回的不为零,但希望Jenkins Job 在执行成功后,要显示成功状态。

例如:通过 Shell 命令列出以 fail-list- 开头的文件,如果存在则通知用户,如果不存在则不通知用户。

ls -a fail-list-*

默认情况是执行如上命令导致了整个 Job 失败。

失败 log

解决
#

经过一番调查,使用以下代码片段解决了如上问题。

stage("Send notification") {
  steps {
    script {
      def fileExist = sh script: "ls -a fail-list-* > /dev/null 2>&1", returnStatus: true
      if ( fileExist == 0 ) {
        // send email to user
      }else {
        // if not found fail-list-* file, make build status success.
        currentBuild.result = 'SUCCESS'
      }
    }
  }
}

分析
#

在执行 Shell 时,添加了 returnStatus: true。这是将状态码返回并保存起来,然后与 0 进行比较。

如果不等于 0,如果不添加 currentBuild.result = 'SUCCESS',Jenkins 的整个 Job 还是会标记为失败状态。添加后,人为的忽略错误,将 Job 状态置为成功。

相关文章

Jenkins Linux Agent 配置
·353 字·1 分钟
本文提供了 Jenkins Linux Agent 的逐步配置指南,包括 Java 运行时的准备、节点创建以及常见问题的排查方法。
Jenkins Windows Agent 配置
·608 字·2 分钟
本文提供 Jenkins Windows Agent 的详细配置步骤,包括 Java 运行时准备、节点创建以及常见问题的排查方法。
将 Jenkins Shell 返回的字符串处理为字符数组
·600 字·2 分钟
如何在 Jenkins Pipeline 中将 Shell 返回的字符串处理为字符数组,以便在后续步骤中进行处理和使用。
忽略 Jenkins Shell 步骤中的故障
·389 字·1 分钟
如何在 Jenkins 中使用 set +e 和 set -e 来控制 Shell 脚本的执行行为,以便在出现错误时不终止整个构建流程。
Jenkins 与 Bitbucket Webhooks 的配置和使用
·1303 字·3 分钟
本文介绍如何在 Jenkins 中配置 Bitbucket Webhooks,以便在创建 Pull Request 时自动触发 Jenkins 构建。
解决 “.NET Framework 2.0 or later is required on this computer to run a Jenkins agent as a Windows service” 问题
·316 字·1 分钟
当 Jenkins Windows Agent 因缺少 .NET Framework 无法连接时,通过安装 .NET Framework 3.5 并设置 Jenkins Agent 服务来解决问题。