Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 从jenkins shell脚本执行Diff命令时失败_Bash_Shell_Jenkins_Scripting_Diff - Fatal编程技术网

Bash 从jenkins shell脚本执行Diff命令时失败

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”将生成标记为失败 甚至

我执行的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”将生成标记为失败

甚至没有一个错误来找出这是什么问题

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

有人能帮我找到需要做的事吗

上面的代码段来自日志。 让我仅通过运行命令来粘贴日志


+ 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“查看”正在执行的每个命令。