我們有一個在 Gitlab 中管理的專案,帶有用于構建和測驗(pytest、Google 測驗)的 CI 管道。我們在 Google 測驗中的兩三個測驗用例失敗了。但是 Gitlab 認為測驗階段是成功的。是不是因為成功率超過 90%(任意值)?如果我們沒有獲得 100% 的成功,有沒有辦法讓階段(以及整個管道)失敗?
這是管道摘要的螢屏截圖:

這是階段的 yml 腳本:
test_unit_test:
stage: test
needs: ["build", "build_unit_test"]
image: $DOCKER_IMAGE
rules:
- if: '$CI_PIPELINE_SOURCE != "merge_request_event"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
script: |
ZIPNAME=`cat _VERSION_.txt`
./scripts/gitlab-ci/stage-unittests.sh test_unit_test_report.xml $ZIPNAME
artifacts:
reports:
junit: test_unit_test_report.xml
expire_in: 1 week
感謝您的任何幫助。問候。
uj5u.com熱心網友回復:
Gitlab CI / CD的作業不在乎什么腳本領域正在做的(所以他們不看你的,例如,測驗通過的百分比)。他們唯一用來確定作業是通過還是失敗的是退出代碼和allow_failure關鍵字。
在每個命令之后before_script,script和after_script部分被執行時,Gitlab轉輪檢查命令的退出代碼,看它是否是0。如果它不為零,則認為該命令失敗,如果allow_failure未true為作業設定關鍵字,則作業失敗。
因此,對于您的作業,即使測驗失敗,腳本仍以退出代碼 0 存在,這意味著命令本身已成功完成。這種情況下的命令是:
ZIPNAME=$(cat _VERSION_.txt)
./scripts/gitlab-ci/stage-unittests.sh test_unit_test_report.xml $ZIPNAME
注意:我用這里$(command)解釋的語法替換了你的反引號 '`',它做同樣的事情(執行這個命令),但比 '`command`' 有一些優點,包括嵌套和更容易在 Markdown 中使用,其中 '`' 表示代碼格式。
因此,由于您正在呼叫腳本 ( ./scripts/gitlab-ci/stage-unittests.sh) 來運行測驗,因此該腳本本身已成功完成,因此作業成功完成。查看該腳本,看看您是否能說出即使測驗失敗它也能成功完成的原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/322677.html
