2014-10-30 49 views
1

我在Jenkins上并行运行两个perl脚本,如果前两个脚本成功执行,应该执行一个脚本。如果我在脚本1中遇到错误,脚本2仍然运行,因此退出状态成功。在Jenkins上并行运行脚本时捕获错误状态

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

目前我的设置是这样

perl_script_1 & 

perl_script_2 & 

wait 

perl_script_3 

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

注:我使用詹金斯的tcsh shell。

回答

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

我希望这会有所帮助。

+0

嗨..谢谢!有没有办法在不写入test1_result文件的情况下找到它?因为等待命令将负责检查作业的状态。 – user2552451 2014-11-04 08:46:20

+0

我期待像if(perl_script1 && perl_script2)然后做perl_script_3 – user2552451 2014-11-04 08:47:18

+0

你也可以试试:)。我正在向类似案例提出我的解决方案。我喜欢保持简单,即使脚本更长更详细。 – 2014-11-04 13:55:49

相关问题