gitlab 中的代码覆盖率 CI/CD

Code coverage in gitlab CI/CD

我使用 Docker-dind 构建和测试我的 python 代码。我对如何 运行 在 gitlab-ci 中覆盖以下两个选项感到困惑。

1) Gitlab 本身就有覆盖范围 [here]

2) 我遵循 python 的报道 tutorial 并使用以下内容创建我自己的报道:

 coverage:
  stage: test
  script:
      - docker pull $CONTAINER_TEST_IMAGE
      - docker run $CONTAINER_TEST_IMAGE python -m coverage run tests/tests.py
      - docker run $CONTAINER_TEST_IMAGE python -m coverage report -m

当gitlab抛出异常时No data to report.:

我猜coverage report 命令不能access/find .coverage 容器中的文件。


所以我的问题是在这种情况下 运行 coverage 的优雅方法是什么?

I guess coverage report command can not access/find .coverage file in the container.

是的,你的假设是正确的。来自 运行宁:

- docker run $CONTAINER_TEST_IMAGE python -m coverage run tests/tests.py
- docker run $CONTAINER_TEST_IMAGE python -m coverage report -m

你实际上一个接一个地启动了两个完全独立的容器。

为了提取覆盖率报告,您必须在 coverage run 命令像这样在同一个容器中完成后执行 运行 coverage report 命令(我假设 bash shell 这里):

-  docker run $CONTAINER_TEST_IMAGE /bin/bash -c "python -m coverage run tests/tests.py && python -m coverage report -m" 

因为 已经使第一部分更容易,即获取覆盖细节,我尝试解决 how to get reports?

这是Gitlab coverage doc给出的。 所以你的coverage作业必须这样写

 coverage:
  stage: test
  script:
      - docker pull $CONTAINER_TEST_IMAGE
      - docker run $CONTAINER_TEST_IMAGE /bin/bash -c "python -m coverage run tests/tests.py && python -m coverage report -m"
  coverage: '/TOTAL.+ ([0-9]{1,3}%)/'

mondwan blog

中提到了正则表达式

插件

如果您在 README.md 文件中添加以下行,您将获得一个漂亮的 badge(在 master README.md 中),其中包含您的覆盖详细信息。

[![coverage report](https://gitlaburl.com/group_name/project_name/badges/master/coverage.svg?job=unittest)](https://gitlaburl.com/group_name/project_name/commits/master)