Bash 从jenkins shell脚本执行Diff命令时失败
我执行的diff命令很简单,但从jenkins的excecute shell脚本发出时失败Bash 从jenkins shell脚本执行Diff命令时失败,bash,shell,jenkins,scripting,diff,Bash,Shell,Jenkins,Scripting,Diff,我执行的diff命令很简单,但从jenkins的excecute 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”将生成标记为失败 甚至
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”将生成标记为失败
甚至没有一个错误来找出这是什么问题
当我直接从服务器运行相同的命令时,该命令将给出结果
有人能帮我找到需要做的事吗
上面的代码段来自日志。
让我仅通过运行命令来粘贴日志
+ 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
+diff Delta_changes_current.txt Delta_changes_previous.txt
1,4c1
修改文件##########
<
/OracleBroker.java
生成步骤“执行shell”将生成标记为失败
根据diff手册页,其打印输出和立即失败:
_如果输入相同,则退出状态为0;如果输入不同,则退出状态为1;如果输入有故障,则退出状态为2_
如果文件不同,diff
将退出状态设置为1。Jenkins将执行步骤视为失败,如果它返回的退出状态不同于0
您可以再添加一个命令来捕获这种情况:
(( $? < 2 )) && true # Convert status 1 to 0
($?<2))&&true#将状态1转换为0
通过附加信息,我相信@user1934428确定了真正的根本原因,即diff
cmd的退出状态。如果未指定外壳程序的退出cide,它将返回最后一个cmd结果。你可以按注释添加一行来覆盖。这真的节省了我很多时间。花了这么多时间才明白diff命令返回的退出代码导致了失败。谢谢alot@sravanisrinija小心-有几个命令可以返回非零退出代码,即使它们在直觉上不会失败<代码>grep是另一种常见的方法。是的。。对。我在脚本中使用了grep命令@number-of-places。我的脚本每次遇到grep都会失败,。。那也是从詹金斯那里逃出来的。从direct server可以(@sravanisrinija:当我在Jenkins下使用shell脚本(在我的例子中是zsh)时,我没有将每个命令定义为单独的Jenkins步骤,而是编写了整个脚本,在其中我可以控制整个退出代码。我不需要Jenkins“查看”正在执行的每个命令。