我需要在我的管道中進行失敗的測驗才能使作業失敗,以便我可以控制它。問題是測驗是在“docker in docker”中運行的,所以作業不會因為容器運行正確而失敗,但測驗不會回傳錯誤代碼(即使失敗)。腳本“docker:test”在容器中運行我的測驗套件,我的管道就像:
image: docker:dind #Alpine
stages:
- install
- test
# - build
- deploy
env:
stage: install
script:
- chmod x ./setup_env.sh
- ./setup_env.sh
artifacts:
paths:
- .env
expire_in: 1 days
tests:
stage: test
before_script:
- docker rm extractos-bancarios-test || true
script:
- apk add --update nodejs npm
- npm run docker:test
- docker cp extractos-bancarios-test:/usr/src/coverage .
- docker cp extractos-bancarios-test:/usr/src/junit.xml .
cache:
paths:
- coverage/
artifacts:
when: always
paths:
- coverage/
reports:
junit:
- junit.xml
# docker image:
# stage: build
# script:
# - npm run docker:build
remove .env:
stage: deploy
script:
- rm .env
pages:
stage: deploy
script:
- mkdir .public
- cp -r coverage/* .public
- mv .public public
artifacts:
paths:
- public
# only:
# - main
我的 npm 腳本是:
"docker:test": "npm i && tsc && docker build -t extractos-bancarios-test --target test . && docker run -d --name extractos-bancarios-test extractos-bancarios-test && docker logs -f extractos-bancarios-test >> logs.log",
在 docker 中使用 docker 時測驗失敗時,我需要使管道失敗
uj5u.com熱心網友回復:
我能夠自己解決問題,并將其記錄在案,這樣沒有人像我一樣浪費時間。對于第一個容器內的容器失敗,我需要它在報告中有錯誤時回傳退出代碼 1。所以我在 .gitlab-ci.yml 的腳本部分添加了一個帶有 grep 的條件:
tests:
stage: test
before_script:
- docker rm extractos-bancarios-test || true
- rm junit.xml || true
- rm -r coverage || true
script:
- apk add --update nodejs npm
- npm run docker:test
- docker cp extractos-bancarios-test:/usr/src/coverage .
- docker cp extractos-bancarios-test:/usr/src/junit.xml .
- if grep '<failure' junit.xml; then exit 1; else exit 0; fi
cache:
paths:
- coverage/
artifacts:
when: always
paths:
- coverage/
reports:
junit:
- junit.xml
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/524568.html
上一篇:錯誤:TypeError:'process.env'僅接受可配置的whileinstallwindows-build-tools
