为什么在命令行中使用csh-e选项成功,但在jenkins执行shell中失败?

为什么在命令行中使用csh-e选项成功,但在jenkins执行shell中失败?,jenkins,csh,Jenkins,Csh,我正在使用jenkins构建一堆遗留代码。遗留代码附带一些用csh编写的复杂构建脚本 生成脚本不会检查错误或在出现错误时退出。用户需要扫描输出以查找错误消息。然而,这对詹金斯来说并不奏效 我正在jenkins的“shell执行”构建步骤中执行csh构建脚本。例如: export PATH=`pwd`/ALL/bin:/usr/local/bin:/usr/bin:/bin:$PATH cd ATLb2.00/expt_02.0 csh 020.com 导出路径=`pwd`/ALL/bin:/us

我正在使用jenkins构建一堆遗留代码。遗留代码附带一些用csh编写的复杂构建脚本

生成脚本不会检查错误或在出现错误时退出。用户需要扫描输出以查找错误消息。然而,这对詹金斯来说并不奏效

我正在jenkins的“shell执行”构建步骤中执行csh构建脚本。例如:

export PATH=`pwd`/ALL/bin:/usr/local/bin:/usr/bin:/bin:$PATH cd ATLb2.00/expt_02.0 csh 020.com 导出路径=`pwd`/ALL/bin:/usr/local/bin:/usr/bin:/bin:$PATH cd ATLb2.00/expt_02.0 csh 020.com 当我从命令行运行此命令时,我还可以使用-e选项:

csh -e 020.com csh-e 020.com 在本例中,正如我预期的那样,脚本将运行,但当遇到第一个错误时,脚本将停止并返回非零代码。然而,当我在Jenkins中尝试这一点时,构建一到达csh-e命令就失败了,没有执行任何脚本

詹金斯的错误是:

+ csh -e 020.com Build step 'Execute shell' marked build as failure +csh-e 020.com 生成步骤“执行shell”将生成标记为失败 在命令行上,脚本运行,我看到各种输出,直到出现故障,然后脚本退出。在詹金斯身上,脚本似乎连运行都没有成功。没有输出,即使没有失败的脚本也不会在jenkins的-e选项下运行


怎么了?

我建议您在更全局的级别上指定csh,然后在Jenkins构建步骤中执行命令

如果要对所有作业使用csh,可以使用Jenkins>Manage Jenkins>shell Executive设置默认shell

如果只想将csh用于特定作业,请使用shebang开始执行shell构建步骤,例如:

#!/usr/bin/tcsh -e -x
command1
command2
   ...
因为我只测试了tcsh,所以这就是我在示例中使用的

注意
后面不允许有空格

这将导致错误

java.io.IOException: Cannot run program ""

我在Jenkins 1.625.3上测试了上述内容,我建议您在更全局的级别上指定csh,然后在Jenkins构建步骤中执行这些命令

如果要对所有作业使用csh,可以使用Jenkins>Manage Jenkins>shell Executive设置默认shell

如果只想将csh用于特定作业,请使用shebang开始执行shell构建步骤,例如:

#!/usr/bin/tcsh -e -x
command1
command2
   ...
因为我只测试了tcsh,所以这就是我在示例中使用的

注意
后面不允许有空格

这将导致错误

java.io.IOException: Cannot run program ""

我在Jenkins 1.625.3上测试了上述内容,这些是
#詹金斯解释的行?在正常使用中,
#由内核解释,在
#之后允许有空格--命令名后面通常不能有多个参数(
#!/usr/bin/tcsh-ex
应该可以工作)。Java抱怨它无法执行程序“”。此空字符串出现在
#之间和后面的空白。因此,我认为詹金斯正在解释这一点。关于多个选项,您有一个很好的观点。我应该仔细看看它们是否真的都有效果。这些是
#詹金斯解释的行?在正常使用中,
#由内核解释,在
#之后允许有空格--命令名后面通常不能有多个参数(
#!/usr/bin/tcsh-ex
应该可以工作)。Java抱怨它无法执行程序“”。此空字符串出现在
#之间和后面的空白。因此,我认为詹金斯正在解释这一点。关于多个选项,您有一个很好的观点。我应该仔细看看它们是否真的都有效果。