docker gitlab-ci作业不会失败,但测试会失败

xzv2uavs  于 2022-11-03  发布在  Docker
关注(0)|答案(1)|浏览(234)

我需要在我的管道中有一个失败的测试来使作业失败,这样我就可以控制它。问题是测试是在“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时,如果测试失败,我需要使管道失败

6jygbczu

6jygbczu1#

我自己解决了这个问题,并将它记录下来,这样就不会有人像我一样浪费时间了。为了让第一个容器中的容器失败,我需要它在报告中出现错误时返回一个退出代码1。因此,我在my .gitlab-ci.yml的scripts部分添加了一个带有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

相关问题