在Jenkins上并行运行脚本时捕获错误状态

时间:2014-10-30 08:29:44

标签: perl shell jenkins tcsh

我在Jenkins上并行运行了两个perl脚本,还有一个脚本,如果前两个脚本成功,它们应该被执行。如果我在script1中收到错误,脚本2仍会运行,因此退出状态会成功。

我想以这样的方式运行它:如果任何一个并行脚本失败,作业应该以失败状态停止。

目前我的设置似乎是

perl_script_1 &

perl_script_2 &

wait

perl_script_3

如果脚本1或2在中间失败,则作业应以失败状态终止,而不执行作业3.

注意:我在Jenkins中使用tcsh shell。

1 个答案:

答案 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 调整执行的其余部分。

我希望这会有所帮助。