我有一个私有的gitlab ce omnibus实例,带有以下.gitlab-ci.yml:
image: python:3.6
stages:
- lint
- test
before_script:
- python -V
- pip install pipenv
- pipenv install --dev
lint:
stage: lint
script:
- pipenv run pylint --output-format=text --load-plugins pylint_django project/ | tee pylint.txt
- score=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' pylint.txt)
- echo "Pylint score was $score"
- ls
- pwd
- pipenv run anybadge --value=$score --file=pylint.svg pylint
artifacts:
paths:
- pylint.svg
test:
stage: test
script:
- pipenv run python manage.py test
所以我认为我会将图像存储在lint作业的工件中并通过徽章功能显示它.
但我遇到以下问题:当我浏览https://example.com/[group]/[project]/-/jobs/[ID]/artifacts/file/pylint.svg时,我没有看到徽章,而是有以下消息:
The image could not be displayed because it is stored as a job artifact. You can download it instead.
无论如何,我觉得这是错误的方式,因为即使我可以获得图像,似乎没有办法从上一个作业获取图像,因为徽章图像的gitlab URL仅支持%{project_path} ,%{project_id},%{default_branch},%{commit_sha}
那么如何根据gitlab管道中的结果生成的svg为gitlab项目添加徽章?
我的猜测是我可以推送到.badge文件夹,但这听起来不是一个干净的解决方案.
最佳答案 您确实可以获取最新作业的工件(请参阅文档
here),但诀窍是您需要使用稍微不同的URL:
https://example.com/[group]/[project]/-/jobs/artifacts/[ref]/raw/pylint.svg?job=lint
其中[ref]是对branch / commit / tag的引用.
说到Gitlab中可用的徽章占位符,您可以将%{default_branch}或%{commit_sha}放入[ref].这将不允许您为每个分支获取正确的徽章,但至少您的默认分支将获得一个.
另请注意,?job = lint查询参数是必需的,没有它,URL将无法工作.