如何将mocha日志作为gitlab工件从docker compose容器输出?

如何将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

我正在使用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_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设置中实例化的内容

这方面仍然存在一些问题。失败的测试仍然会将测试阶段设置为已通过,因为测试映像中的退出代码对脚本的其余部分并不重要,因此这需要大量改进