我正在使用jenkins构建一堆遗留代码。遗留代码附带了一些复杂的构建脚本,用csh编写。
构建脚本不会检查或退出错误。期望用户扫描输出以获取错误消息。但是,这对詹金斯来说效果不佳。
我正在jenkins“shell execution”构建步骤中执行csh构建脚本。例如:
export PATH=`pwd`/ALL/bin:/usr/local/bin:/usr/bin:/bin:$PATH cd ATLb2.00/expt_02.0 csh 020.com
当我从命令行运行它时,我也可以使用-e选项:
csh -e 020.com
在这种情况下,正如我所料,脚本已运行,但遇到第一个错误时,脚本会停止并返回非零代码。但是,当我在Jenkins中尝试这个时,一旦它到达csh -e命令,构建就会失败,而不执行任何脚本。
我在詹金斯遇到的错误是:
+ csh -e 020.com Build step 'Execute shell' marked build as failure
在命令行上,脚本运行,我看到所有类型的输出,直到出现故障,然后脚本退出。在Jenkins上,脚本似乎在没有运行的情况下失败。没有输出,即使没有失败的脚本也不会在带有-e选项的jenkins下运行。
怎么了?
答案 0 :(得分:0)
我建议您在更全局的级别指定csh,然后在Jenkins构建步骤中执行命令。
如果要对所有作业使用csh,可以使用 Jenkins>设置默认shell。管理Jenkins> shell可执行文件。
如果您只想将csh用于特定作业,请使用shebang开始执行shell 构建步骤,例如:
#!/usr/bin/tcsh -e -x
command1
command2
...
由于我只测试了tcsh,这就是我在示例中使用的。
请注意#!
之后
#! /usr/bin/tcsh # Wrong
这将给出错误
java.io.IOException: Cannot run program ""
我在Jenkins 1.625.3上测试了上述内容