我需要在我的管道中有一个失败的测试来使作业失败,这样我就可以控制它。问题是测试是在“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时,如果测试失败,我需要使管道失败
1条答案
按热度按时间6jygbczu1#
我自己解决了这个问题,并将它记录下来,这样就不会有人像我一样浪费时间了。为了让第一个容器中的容器失败,我需要它在报告中出现错误时返回一个退出代码1。因此,我在my .gitlab-ci.yml的scripts部分添加了一个带有grep的条件: