作者:372630243 | 来源:互联网 | 2023-02-08 05:58
Gitlab具有生成有关构建状态和覆盖百分比的徽章的功能.
是否可以创建自定义徽章以显示Pylint结果?或者只是在README.md中显示此结果?
我已经为Pylint做了CI工作
1> JGC..:
我编写了一个python徽章生成包,可以在视觉上与主徽章服务类似地生成徽章.它非常灵活,您可以在您的python代码中导入和使用,或从命令行运行.
我在GitLab CI中使用它来显示pylint和覆盖率分数.
还有其他的方法可以做到这一点使用shields.io(见对方的回答从kubouch),但是这种方法可以在情况下使用您可能没有外部Internet访问,如在公司/企业的环境,让防火墙或代理卡住互联网.
GitLab CI设置
1.生成徽章
我的CI管道有一个运行pylint的步骤,我曾经sed
从输出文本中提取得分.然后我使用anybadge
(详细信息如下)生成一个pylint分数徽章,并将其保存为public/pylint.svg
.
pylint:
stage: test
script:
- pylint --rcfile=.pylintrc --output-format=text | tee pylint.txt
- score=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' pylint.txt)
- echo "Pylint score was $score"
- anybadge --value=$score --file=public/pylint.svg pylint
如果pylint生成非零rc,那么GitLab会将其视为命令错误并且作业将失败,这意味着不会生成徽章,并且丢失的图像将显示徽章的使用位置.
注意:pylint WILL OFTEN生成非零返回码,因为它使用退出代码来传达lint检查的状态.我建议使用像pylint-exit这样的东西来处理CI管道中的pylint返回码.
2.将徽章注册为管道工件
我将生成的徽章文件注册为CI作业中的工件,方法是将其包括在.gitlab-ci.yml
:
pylint:
...
- echo "Pylint score was $score"
- anybadge --value=$score --file=public/pylint.svg pylint
artifacts:
paths:
- public/pylint.svg
3.将徽章发布到GitLab Pages
我包含一个页面发布步骤,它将公共目录中的所有内容部署到GitLab页面:
pages:
stage: deploy
artifacts:
paths:
- public
only:
- master
4.在README.md中包含徽章
当为项目运行主管道时,该pylint.svg
文件将发布到GitLab页面,然后我可以从我的项目中引用该图像,README.md
以便显示最新的pylint标记.
如果你的项目使用https://gitlab.com,那么svg工件的URL通常是这样的(用你的用户名替换NAMESPACE,如果你的项目在一个组下,则用组名替换 - 这里有更多细节):
https://NAMESPACE.gitlab.io/pyling.svg
在您的README.md中,您可以包含一个图像:
![pylint](https://NAMESPACE.gitlab.io/pyling.svg)
如果您想将图像转换为链接,可以使用:
[![pylint](https://NAMESPACE.gitlab.io/pyling.svg)](LINKTARGET)
如果您需要有关任何设置的更多信息,请与我们联系.
Anybadge Python包
以下是anybadge Python包的更多信息:
您可以设置徽章标签和值,也可以根据阈值设置颜色.有针对pylint,coverage和管道成功的预建设置,但您可以创建自己喜欢的任何徽章.
以下是github项目的链接,其中包含更详细的文档:https://github.com/jongracecox/anybadge
安装时 pip install anybadge
示例python代码:
import anybadge
# Define thresholds: <2=red, <4=orange <8=yellow <10=green
thresholds = {2: 'red',
4: 'orange',
6: 'yellow',
10: 'green'}
badge = anybadge.Badge('pylint', 2.22, thresholds=thresholds)
badge.write_badge('pylint.svg')
命令行使用示例:
anybadge --label pylint --value 2.22 --file pylint.svg 2=red 4=orange 8=yellow 10=green