Gitlab CI中的覆盖率徽章,Python覆盖率始终未知

Gitlab CI中的覆盖率徽章,Python覆盖率始终未知,python,code-coverage,gitlab-ci,badge,coverage.py,Python,Code Coverage,Gitlab Ci,Badge,Coverage.py,我试图在私有Gitlab CE安装(v11.8.6)中展示Python项目的覆盖范围,使用for Python。但是,徽章上总是写着“未知” 这是我的.gitlab ci.yaml文件中的相关作业: coverage: stage: test before_script: - pip3.6 install coverage - mkdir -p public script: - coverage run --source=m

我试图在私有Gitlab CE安装(v11.8.6)中展示Python项目的覆盖范围,使用for Python。但是,徽章上总是写着“未知”

这是我的
.gitlab ci.yaml
文件中的相关作业:

coverage:
    stage: test
    before_script:
        - pip3.6 install coverage
        - mkdir -p public
    script:
        - coverage run --source=my_service setup.py test
        - coverage report | tee public/coverage.txt
    artifacts:
        paths:
            - public/coverage.txt
    coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/'
我希望徽章显示此URL的实际覆盖范围,因此这是我在
常规
/
徽章
下的项目设置中输入的内容:

http://<privategitlaburl>/%{project_path}/badges/%{default_branch}/coverage.svg?job=coverage
我还在
CI/CD
/
管道设置下的项目设置中的
测试覆盖率解析
字段中尝试了相同的正则表达式,但同一页面上显示的徽章始终显示
未知

文档对我来说不太清楚,因为它没有描述整个过程。创建后就很清楚了,并且有一个手册可以将覆盖率报告发布到页面,但是从提取分数到显示徽章似乎没有明确的路径

我应该在我的
.gitlab ci.yaml
文件中使用
覆盖范围
条目还是在管道设置中填写正则表达式

不管怎样,Gitlab CI应该基于此更新覆盖率标志吗,还是需要使用其他工具来更新覆盖率标志


其中,应报告提取的覆盖率分数;我怎样才能知道我的正则表达式是否有效?

我终于得到了覆盖率徽章,它显示了我的python项目的百分比,而不是今天未知的百分比。以下是my.gitlab-ci.yml中的相关内容:

job:
 script:
  - 'python -m venv venv'
  - '.\venv\Scripts\activate'
  - 'python -m pip install -r requirements.txt'
  - 'coverage run --source=python_project -m unittest discover ./tests'
  - 'coverage report --omit=things_that_arent_mine/*'
  - 'coverage xml'
 artifacts:
  reports:
   cobertura: 'coverage.xml'
我还在使用repo CI/CD设置>常规管道>测试覆盖率解析中列出的用于gcovr的正则表达式,我在阅读后找到了该正则表达式,以及关于以下内容的第二条到最后一条注释:

在回购常规设置>徽章中,我的徽章链接为:

http://gitlab-server/%{project_path}/-/jobs
我的徽章图像url是:

http://gitlab-server/%{project_path}/badges/%{default_branch}/coverage.svg
我不太清楚Cobertura报告工件是做什么的(我认为它与此有关),但我把它放在那里,因为教程带我走上了这条路。我确认从.gitlab-ci.yml中删除以下内容不会破坏jobs页面上的徽章或覆盖范围编号:

  - 'coverage xml'
 artifacts:
  reports:
   cobertura: 'coverage.xml'
删除或评论时:

- 'coverage report --omit=things_that_arent_mine/*'
不破坏徽章以及回购协议CI/CD作业页面上显示的保险范围编号。我还尝试了一些我测试过的regex变体,但唯一没有导致gitlab呕吐的是gcovr变体

希望这能有所帮助,把这个徽章用于python项目所需的东西拼凑起来是一件困难而艰巨的事情

编辑: 同时,我也发现了如何在覆盖率上增加一些性感的精确性。如果将.gitlab-ci.yml的覆盖率报告行更改为:

- 'coverage report --omit=things_that_arent_mine/* --precision=2'
以及CI/CD设置>常规管道>测试覆盖率解析中的正则表达式:

^TOTAL.+?(\d+.\d+\%)$

这应该会给你一个非常精确的覆盖范围,实际上除了你和我没有人会关心。但是天哪,我们可以确定覆盖率是99.99%还是100%。

我也对此进行了深入研究。正如您所说的:命令
coverage report
生成类似以下内容的输出:

[...]
tests/__init__.py              0      0   100%
tests/test_ml_squarer.py       4      0   100%
tests/test_squarer.py          4      0   100%
----------------------------------------------
TOTAL                         17      2    88%
test_service run-test: commands[4] | coverage xml
根据保存的
regex
-表达式,它只需查找
TOTAL
旁边的
88%
。我使用了pytest cov(Python)的推荐值,即
^TOTAL.+?(\d+\%)$


因此,目前运行
coverage xml
对我来说是相当可选的。但是,使用:GitLab Community Edition 12.10.11

Update对我不起作用:它实际上可以在GitLab CI管道中显示覆盖范围,但不会生成徽章。也许这是预期的行为,但谁知道呢?嘿@Carsten,你能找到一个办法来获得百分比吗?@Junkrat没有我这边的更新,对不起。不是或者现在?>但是,它对我不起作用。不幸的是,它不是。我确实使用了
TOTAL.*\s+(\d+%)$
^TOTAL.+?(\d+.\d+\%)$
[...]
tests/__init__.py              0      0   100%
tests/test_ml_squarer.py       4      0   100%
tests/test_squarer.py          4      0   100%
----------------------------------------------
TOTAL                         17      2    88%
test_service run-test: commands[4] | coverage xml