【问题标题】:Diff command failing when executed from jenkins shell script从 jenkins shell 脚本执行 Diff 命令失败
【发布时间】:2021-01-20 02:49:59
【问题描述】:

我执行的 diff 命令很简单,但是当 jenkins 的执行 shell 脚本给出时失败。

echo 'diff Delta_changes_current.txt Delta_changes_previous.txt >> PR.DELTA.FILES'
chmod 777 delta.sh
. ./delta.sh
diff Delta_changes_current.txt Delta_changes_previous.txt

构建步骤“执行 shell”将构建标记为失败

找出这是什么问题甚至没有错误。

当我直接从服务器运行相同的命令时,命令给出结果。

有人可以帮我看看需要做什么

..

上面的sn-p来自日志。 让我通过只运行命令来粘贴日志..


+ diff Delta_changes_current.txt Delta_changes_previous.txt
1,4c1
< ################################# Delta_Changes_currect file for Junit##########
< 
< /OptionlessVDDSController.java
< /OptionlessVDDSControllerTest_.java
\ No newline at end of file
---
> /OracleBroker.java
Build step 'Execute shell' marked build as failure

它的打印输出并立即失败

【问题讨论】:

  • 通过附加信息,我相信@user1934428 确定了真正的根本原因,即diff cmd 的退出状态。如果未指定 shell 的退出 cide,则返回最后一个 cmd 结果。您可以按照说明添加一行以覆盖。

标签: bash shell jenkins scripting diff


【解决方案1】:

根据 diff 手册页:

_如果输入相同,则退出状态为0,如果不同,则为1,如果有问题,则为2。_

如果文件不同,diff 设置退出状态 1。Jenkins 将执行步骤视为失败,如果它返回的退出状态不是 0。

您可以再添加一条命令来捕获这种情况:

(( $? < 2 )) && true # Convert status 1 to 0

【讨论】:

  • 这真的为我节省了很多时间。花了这么多时间才明白 diff 命令正在返回导致失败的退出代码。非常感谢
  • @sravanisrinija 小心 - 有几个命令可以返回非零退出代码,即使它们在直觉上没有失败grep 是另一个常见的。
  • 是的..是的。我必须在脚本中使用 grep 命令@ number of places。每当遇到 grep 时,我的脚本都会继续失败,.. 只有从 Jenkins 运行时也是如此。从直接服务器很好。 :(
  • @sravanisrinija :当我在 Jenkins 下使用 shell 脚本(在我的例子中是 zsh)时,我没有将每个命令定义为单独的 jenkins 步骤,而是编写了整个脚本,我可以在其中控制整个退出代码。我不需要 Jenkins 来“查看”正在执行的每一个命令。
猜你喜欢
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多