2017-08-16 93 views
0

在我的CI系統,詹金斯執行shell腳本建立... 腳本是這樣的:搬運工運行bash腳本不能退出

docker run -d --rm -v /code-path:/tmp docker-iamge-name sh -c " \ 
    cd /tmp ;\ 
    mkdir build ;\ 
    cd build ;\ 
    cmake ../ ;\ 
    make ;\ 
    ./unit-test-execute-file1 ;\ 
    ... 
" 

但是當有代碼文件的錯誤,使命令退出,並然後執行下一個命令(./ unit-test-execute-file1)。由於make失敗,所以沒有生成單元測試執行文件,並且下一個命令也失敗......最後,腳本以代碼0退出,並且Jenkins顯示構建成功..

有人可以幫忙嗎?非常感謝!

回答

1

如果您希望腳本在任何時候腳本失敗,應該使用set -e作爲bash腳本的第一行。

你運行的語句將如下所示:

docker run -d --rm -v /code-path:/tmp docker-iamge-name sh -c " \ 
    set -e ;\ 
    cd /tmp ;\ 
    mkdir build ;\ 
    cd build ;\ 
    cmake ../ ;\ 
    make ;\ 
    ./unit-test-execute-file1 ;\ 
    ... 
" 
0

而不是依賴於set -e(這確實是可靠的,至少在沒有完全理解所有的例外退出SHEL ),明確要運行哪些命令。在這種情況下,您可以簡單地將這些命令與&&一起鏈接起來,以便每個命令僅在前一個命令成功時才運行。鏈的退出狀態是要運行的最後一個命令的退出狀態(例如,如果cd build失敗,退出狀態爲退出狀態sh -c)。

docker run -d --rm -v /code-path:/tmp docker-iamge-name sh -c " 
    cd /tmp && 
    mkdir build && 
    cd build && 
    cmake ../ && 
    make && 
    ./unit-test-execute-file1 && 
    ... 
"