如何将mocha日志作为gitlab工件从docker compose容器输出?
我正在使用gitlab及其ci/cd系统来构建、测试和部署我的代码。我已将其设置为将构建和测试放在单独的容器中:如何将mocha日志作为gitlab工件从docker compose容器输出?,docker,continuous-integration,gitlab,mocha.js,gitlab-ci,Docker,Continuous Integration,Gitlab,Mocha.js,Gitlab Ci,我正在使用gitlab及其ci/cd系统来构建、测试和部署我的代码。我已将其设置为将构建和测试放在单独的容器中: image: docker:latest ... callback_build: stage: build script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker build --no-cache -t $CI_REGISTRY_I
image: docker:latest
...
callback_build:
stage: build
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build --no-cache -t $CI_REGISTRY_IMAGE:$CI_PIPELINE_ID .
- docker push $CI_REGISTRY_IMAGE:$CI_PIPELINE_ID
callback_test:
stage: test
image: tmaier/docker-compose:latest
script:
- cd test/
- >
docker-compose -f docker-compose.yml up
--build
--abort-on-container-exit
--exit-code-from hellosign-callback-listener-tests
在测试的Dockerfile中,我运行命令:ENTRYPOINT[“mocha”、“--config”、“/test/.mocharc.js”]
现在,由于我们的设置方式,docker的输出不会显示在gitlab ci/cd视图中,相反,我认为它会被转发到logstash,logstash会将其推送到我们的ELK堆栈中,以便在Kibana上查看。目前这是不可靠的,所以我认为最好的方法是使用
Gitlab似乎没有定制的mochajs工件集成,因此我不确定如何最好地将mocha的输出放入工件中,以便我从Gitlab下载并查看。好的,因此您需要更改的第一件事是在某处编写测试,因为当前的entrypoint命令没有在任何地方编写测试 将entrypoint命令切换为:
entrypoint mocha--config./test/.mocharc.js--reporter json>results.json
这将使用在运行测试的目录中创建json报告
然后,在构建和运行测试时,需要对.gitlab-ci.yml文件进行一些重大更改
image: docker:latest
callback_test:
stage: test
artifacts:
when: always
untracked: false
expire_in: 1 day
paths:
- results.json
script:
- cd test/
- docker build -f "Dockerfile" -t $CI_REGISTRY_IMAGE-tests:$CI_PIPELINE_ID --build-arg SUT_IMAGE=$CI_REGISTRY_IMAGE:$CI_PIPELINE_ID .
- docker run --name $CI_PIPELINE_ID -d -v /var/run/docker.sock:/var/run/docker.sock $CI_REGISTRY_IMAGE-tests:$CI_PIPELINE_ID
- docker wait $CI_PIPELINE_ID
- docker cp $CI_PIPELINE_ID:/usr/src/app/results.json $CI_PROJECT_DIR/results.json
所以我们使用docker来构建我们的测试映像,并将一个基本映像传递给它以供使用。基本映像来自我的build docker映像,我的测试Dockerfile如下所示:
ARG SUT_IMAGE
FROM $SUT_IMAGE
...
npm i -g mocha
然后我们运行我们刚刚构建的映像,并给它一个唯一的名称,我只是使用管道id
然后,我们等待图像中的退出代码,否则它将过早退出,结果文件将为空
然后我们将结果文件从映像复制到项目目录
由于我们正在删除docker compose,因此任何环境变量现在都必须来自.env
文件以及类似于在mocha common.js设置中实例化的内容
这方面仍然存在一些问题。失败的测试仍然会将测试阶段设置为已通过,因为测试映像中的退出代码对脚本的其余部分并不重要,因此这需要大量改进