2014-10-30 145 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

相關問題