Gitlab-如何基于作业管道添加徽章

时间:2018-09-07 18:41:22

标签: gitlab badge

我的目标是根据管道结果显示徽章(例如enter image description here)。

我有一个带有以下.gitlab-ci.yml的私有gitlab ce omnibus实例:

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

所以我认为我应该将图像存储在皮棉作业的工件中,并通过徽章功能进行显示。

但是我遇到以下问题:浏览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仅支持{ {1}}

那么如何根据gitlab管道中的结果生成的svg将徽章添加到gitlab项目中?

我的猜测是,我可以推送到.badge文件夹,但这听起来并不干净。

1 个答案:

答案 0 :(得分:1)

您确实可以获取最新工作的工件(请参见文档here),但诀窍在于您需要使用稍微不同的URL:

https://example.com/[group]/[project]/-/jobs/artifacts/[ref]/raw/pylint.svg?job=lint

其中[ref]是对分支/提交/标签的引用。

说到Gitlab中可用的徽章占位符,您可以将%{default_branch}%{commit_sha}放入[ref]中。这将不允许您为每个分支获取正确的徽章,但是至少您的默认分支将获得一个。

还请注意,?job=lint查询参数是必需的,否则该参数将无法使用。