我有一个在bash脚本中工作的grep命令:
if grep 'stackoverflow' outFile.txt; then
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
这在我的主机上运行时工作正常.然而,当我从Jenkins构建步骤调用它时,它每次都退出0,而不是看到'stackoverflow'.出了什么问题?
添加以下行作为"执行Shell"命令中的第一行
#!/bin/sh
Run Code Online (Sandbox Code Playgroud)
grep命令在找不到匹配时以非零代码退出,并导致jenkins将作业标记为失败.见下文.
在"执行Shell"的帮助部分
运行shell脚本(默认为sh,但这是可配置的)来构建项目.该脚本将以工作空间作为当前目录运行.输入shell脚本的内容.如果您的shell脚本没有像#!/ bin/sh那样的标题行,那么将使用系统范围内配置的shell,但您也可以使用标题行以另一种语言编写脚本(例如#!/ bin/perl) )或控制shell使用的选项.
默认情况下,将使用"-ex"选项调用shell.因此,所有命令在执行之前都会被打印,如果任何命令以非零退出代码退出,则构建被视为失败.再次,添加#!/ bin/...行来更改此行为.
作为最佳实践,尽量不要在此处放置长shell脚本.相反,考虑在SCM中添加shell脚本并简单地从Jenkins调用该shell脚本(通过bash -ex myscript.sh或类似的东西),以便您可以跟踪shell脚本中的更改.
我认为你的脚本有错误。您必须在“if”块末尾添加“fi”:
if grep 'stackoverflow' outFile.txt; then
exit 1
fi
Run Code Online (Sandbox Code Playgroud)