簡體   English   中英

從命令中捕獲退出代碼並稍后返回

[英]Capture exit code from command and return it later

我們使用 CI 工具來運行 PHP 項目的自動化測試。

作為此過程的一部分,我們希望將 CI 測試的結果報告給我們的內部儀表板工具。

我們使用的 CI 工具允許我們提供 bash 腳本來執行。 默認情況下,這些是在腳本前加上set -e來執行的。

我想要做的是運行我們的測試套件 (PHPUnit),捕獲退出代碼,調用我們內部儀表板工具的 API(如果此調用因任何原因失敗,我不希望它使用非-0 退出代碼,因為我希望它“總是成功”(這樣,如果它失敗了,它不會導致構建失敗),然后我想用原始的 PHPUnit 退出代碼退出,這樣如果任何測試失敗,那么我們的構建失敗。

目前我的腳本如下所示:

# To reverse the `set -e` prepended by the CI tool
set +e

# Run the test suite and capture the exit code
phpunit --coverage-xml coverage || phpunitexitcode=$? && exit 0

# Send the data I want to our internal dashboard tool and have it always return exit 0
author=$(cat ~/.ci-dashboard-env | grep AUTHOR | cut -d'=' -f2)
start=$(cat ~/.ci-dashboard-env | grep CHIPPER_BUILD_START | cut -d'=' -f2)
duration=$(($(date '+%s') - $start))

curl -X POST -s -o /dev/null -w "CI Dashboard Response: %{http_code}" \
    -F "project=hub" \
    -F "author=${author}" \
    -F "build_time=${duration}" \
    -F "phpunit_output=@coverage/index.xml" \
    -F "branch=${CI_COMMIT_BRANCH}" \
    https://dashboard.example.com/api/build || exit 0

# Exit with the original PHPUnit exit code so that if the tests failed then the CI tool fails
exit $phpunitexitcode

然而,在運行它時,似乎如果測試套件失敗,則不會調用內部儀表板 API。 由於腳本運行的輸出只顯示 PHPUnit 套件,不包括 curl 請求的輸出。

我哪里錯了?

看起來您的測試套件執行行將始終停止您的腳本並在 phpunit 失敗並返回退出代碼 0 時返回 0。

可能發生的情況是 phpunitexitcode 返回 0。您是否已經在失敗條件下驗證了 phpunitexitcode 的輸出?

|| 指示前一個命令是否成功永遠不會執行后一個命令。 因此,如果它失敗,它將執行后一個命令,該命令旨在獲取 phpunit 退出代碼,如果它是 0 退出並返回 0,如果它是 <0> 它將繼續執行腳本。

正如 Mechaflash 所說的這一行phpunit --coverage-xml coverage || phpunitexitcode=$? && exit 0 phpunit --coverage-xml coverage || phpunitexitcode=$? && exit 0 phpunit --coverage-xml coverage || phpunitexitcode=$? && exit 0不正確

看看這個例子

$ ls file || echo fail && echo ok
ls: cannot access 'file': No such file or directory
fail
ok

兩部分都執行了,所以如果你使用這個語法 ||, && 你應該先設置 &&

$ ls file && echo ok || echo fail
ls: cannot access 'file': No such file or directory
fail

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM