Car*_*ten 11 python code-coverage badge coverage.py gitlab-ci
我正在尝试在私有 Gitlab CE 安装(v11.8.6)中显示Python 项目的覆盖徽章,使用Python 的coverage.py。但是,徽章总是说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: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/'
Run Code Online (Sandbox Code Playgroud)
我希望徽章显示此 URL 的实际覆盖范围,因此这是我在General/下的项目设置中输入的内容Badges:
http://<privategitlaburl>/%{project_path}/badges/%{default_branch}/coverage.svg?job=coverage
Run Code Online (Sandbox Code Playgroud)
我使用 Gitlab 页面阅读了这些说明。但是,我不想仅为此目的使用页面,而且我正在处理一个 Python 项目。
根据 CI/CD 设置中的示例,在这篇文章中,coverage条目中的正则表达式应该可以工作。我可以通过在本地尝试来确认:
$ grep -P "TOTAL\s+\d+\s+\d+\s+(\d+%)" public/coverage.txt
TOTAL 289 53 82%
Run Code Online (Sandbox Code Playgroud)
我还在/Test coverage parsing下的项目设置字段中尝试了相同的正则表达式,但同一页面上显示的徽章一直显示。CI/CDPipeline settingsunknown
文档对我来说不是很清楚,因为它没有描述整个过程。很清楚一旦创建了如何使用徽章,并且有一个将覆盖率报告发布到页面的手册,但是从提取分数到显示徽章似乎没有明确的路径。
我应该使用文件中的coverage条目.gitlab-ci.yaml还是填写管道设置中的正则表达式?
无论哪种方式,Gitlab CI 是否应该基于此更新覆盖徽章,还是我需要使用诸如coverage-badge 之类的其他工具来执行此操作?
应该在哪里报告提取的覆盖率分数;我怎样才能知道我的正则表达式是否有效?
我今天终于为我的 python 项目获得了显示百分比而不是未知的覆盖率徽章。这是我的 .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'
Run Code Online (Sandbox Code Playgroud)
我还使用了在回购CI上市gcovr正则表达式/ CD设置>通用管道>测试覆盖的解析,我看了之后发现这个以及倒数第二个评论此:
^TOTAL.*\s+(\d+\%)$
Run Code Online (Sandbox Code Playgroud)
在 repo General Settings > Badges 中,我的徽章链接是:
http://gitlab-server/%{project_path}/-/jobs
Run Code Online (Sandbox Code Playgroud)
我的徽章图片网址是:
http://gitlab-server/%{project_path}/badges/%{default_branch}/coverage.svg
Run Code Online (Sandbox Code Playgroud)
我不太清楚 Cobertura 报告工件的用途(我认为它特别与合并请求有关),但我把它放在那里,因为教程让我走上了这条路。我确实确认从 .gitlab-ci.yml 中删除以下内容不会破坏工作页面上的徽章或覆盖范围:
- 'coverage xml'
artifacts:
reports:
cobertura: 'coverage.xml'
Run Code Online (Sandbox Code Playgroud)
删除或评论时:
- 'coverage report --omit=things_that_arent_mine/*'
Run Code Online (Sandbox Code Playgroud)
确实破坏了在 repo 的 CI/CD 作业页面上显示的徽章和覆盖范围编号。我还尝试了一些我在rubular 中测试过的正则表达式变体,但唯一没有导致 gitlab 呕吐的变体是gcovr变体。
希望这会有所帮助,拼凑这个徽章在 python 项目上工作所需的东西有点困难和艰巨。
编辑:也只是想出了如何为覆盖百分比数字添加一些性感的精确度。如果将 .gitlab-ci.yml 的覆盖率报告行更改为:
- 'coverage report --omit=things_that_arent_mine/* --precision=2'
Run Code Online (Sandbox Code Playgroud)
以及 CI/CD 设置 > 通用管道 > 测试覆盖率解析中的正则表达式:
^TOTAL.+?(\d+.\d+\%)$
Run Code Online (Sandbox Code Playgroud)
这应该会给你一个非常精确的保险号码,实际上除了你我之外没有人会关心。但是天哪,我们肯定会知道覆盖率是 99.99% 还是 100%。
对我有用的解决方案:
在该.gitlab-ci.yml文件中,在运行覆盖率报告的作业中,我添加了以下几行:
script:
# some lines omitted for brevity
- coverage report --omit=venv/*
coverage: '/TOTAL.*\s+(\d+\%)/'
Run Code Online (Sandbox Code Playgroud)
unknown特别是,除非我将该指令添加到我的测试作业中,否则我无法让徽章显示任何内容coverage。请记住,不同的工具可能会打印不同的输出,因此您可能必须像我一样更改正则表达式。
| 归档时间: |
|
| 查看次数: |
4838 次 |
| 最近记录: |