我在Jenkins上并行运行了两个perl脚本,还有一个脚本,如果前两个脚本成功,它们应该被执行。如果我在script1中收到错误,脚本2仍会运行,因此退出状态会成功。
我想以这样的方式运行它:如果任何一个并行脚本失败,作业应该以失败状态停止。
目前我的设置似乎是
perl_script_1 &
perl_script_2 &
wait
perl_script_3
如果脚本1或2在中间失败,则作业应以失败状态终止,而不执行作业3.
注意:我在Jenkins中使用tcsh shell。
答案 0 :(得分:2)
我有一个类似的设置,我并行运行几个java进程(测试)并等待它们完成。如果有任何失败,我的其余部分都会失败。
每个测试过程在完成后将其结果写入要测试的文件 注意 - 下面的代码示例是用 bash 编写的,但在 tcsh 中应该类似。
为此,我获取每次执行的进程ID:
test1 &
test1_pid=$!
# test1 will write pass or fail to file test1_result
test2 &
test2_pid=$!
...
现在,我等待使用kill -0 PID
命令完成流程
例如 test1 :
# Check test1
kill -0 $test1_pid
# Check if process is done or not
if [ $? -ne 0 ]
then
echo process test1 finished
# check results
grep fail test1_result
if [ $? -eq 0 ]
then
echo test1 failed
mark_whole_build_failed
fi
fi
其他测试相同(您可以循环测试所有正在运行的进程) 稍后根据 mark_whole_build_failed 调整执行的其余部分。
我希望这会有所帮助。