GitLab配置项中的覆盖徽章,Python覆盖始终未知
问题描述
我正在尝试使用coverage.pyfor Python显示私有GitLab CE安装(v11.8.6)中的Python项目的badge覆盖范围。但是,徽章总是写着unknown
。
这是我的.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: '/TOTALs+d+s+d+s+(d+%)/'
我希望徽章显示此URL上的实际覆盖范围,因此这是我在General
/Badges
下的项目设置中输入的内容:
http://<privategitlaburl>/%{project_path}/badges/%{default_branch}/coverage.svg?job=coverage
我使用GitLab页面阅读these instructions。但是,我不希望仅出于此目的使用页面,我正在处理一个Python项目。
根据配置项/CD设置中的示例,在this post中,coverage
entry中的正则表达式应该可以工作。我可以通过在本地尝试来确认这一点:
$ grep -P "TOTALs+d+s+d+s+(d+%)" public/coverage.txt
TOTAL 289 53 82%
我也在CI/CD
/Pipeline settings
下的项目设置中的Test coverage parsing
字段中尝试了相同的regex,但该页面上显示的徽章仍然显示unknown
。
我应该在.gitlab-ci.yaml
文件中使用coverage
项,还是在管道设置中填写正则表达式?
无论哪种方式,GitLab CI是否应基于此更新覆盖徽章,或者我是否需要使用其他工具(如coverage-badge)来执行此操作?
提取的覆盖率分数应该报告在哪里;如何确定我的正则表达式是否正常工作?
解决方案
我终于得到了今天我的Python项目显示百分比而不是未知的覆盖率标记。下面是我的.gitlab-ci.yml:
中的相关内容job:
script:
- 'python -m venv venv'
- '.venvScriptsactivate'
- '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'
我还使用了this后找到的repo CI/CD Settings>;General Pipeline>;Test Coverage Parsing中列出的gcovr正则表达式,以及this上的倒数第二个注释:
^TOTAL.*s+(d+\%)$
在Repo General Settings&>徽章中,我的徽章链接为:
http://gitlab-server/%{project_path}/-/jobs
我的徽章图像URL是:
http://gitlab-server/%{project_path}/badges/%{default_branch}/coverage.svg
我不太清楚Cobertura报告工件的用途(我认为它特别与merge requests有关),但我有它,因为教程带我走上了那条路。我确实确认从.gitlab-ci.yml中删除以下内容不会破坏工作页面上的徽章或覆盖范围编号:
- 'coverage xml'
artifacts:
reports:
cobertura: 'coverage.xml'
删除或注释时:
- 'coverage report --omit=things_that_arent_mine/*'
不会破坏回购的CI/CD作业页上显示的徽章和覆盖范围编号。我还尝试了一些在rubular中测试的正则表达式变体,但唯一没有导致GitLab呕吐的是gcovr变体。
希望这能有所帮助,要拼凑出这个徽章在Python项目中工作所需的内容是有些困难和艰巨的。
编辑: 我也刚刚想出了如何给覆盖率数字增加一些性感的精确度。如果将.gitlab-ci.yml的Coverage报告行更改为:
- 'coverage report --omit=things_that_arent_mine/* --precision=2'
和CI/CD设置>;常规管道>;测试覆盖率解析中的正则表达式:
^TOTAL.+?(d+.d+\%)$
这应该会为您提供一个非常精确的覆盖数字,实际上,除了您和我之外,没有人会关心这个数字。但天哪,我们肯定会知道覆盖率是99.99%还是100%。
相关文章