Gitlab CI使用徽章进行每项工作

Mat*_*att 14 badge gitlab-ci

假设我为一个项目配置了多个作业,如下所示:

build_win32:
  script: ...

build_ios:
  script: ...

unit_tests:
  script: ...

server_tests:
  script: ...

client_tests:
  script: ...
Run Code Online (Sandbox Code Playgroud)

我想要实现的是在README.md下为每个作业配置标记,以便我可以立即反馈具体哪个部分出错.

有一个关于设置徽章的Gitlab文档,但是它有一个限制,它显示了如何为buildcoverage status仅配置徽章.

我想知道Gitlab CI中是否有这样的内置功能.我也可以使用第三方插件.任何帮助将不胜感激.

JGC*_*JGC 15

您可以通过在管道步骤中创建标记,将标记文件注册为管道工件并将它们发布到GitLab页面来实现所需.从那里你可以参考你的徽章README.md

怎么做你问的

1.生成徽章

在每个CI步骤中,您需要生成徽章文件,并将其存储在下面 public/<badge-file>.svg

您可以使用http://shields.io生成徽章文件.我已经编写了自己的Python徽章生成器,可以在这里找到:https://github.com/jongracecox/anybadge

2.将徽章注册为管道工件

通过在每个作业中包含以下内容,将每个生成的徽章文件注册为CI作业中的工件.gitlab-ci.yml:

build_win32:
  script: ...
    - <generate public/build_win32.svg>
  artifacts:
    paths:
      - public/build_win32.svg

build_ios:
  script: ...
    - <generate public/build_ios.svg>
  artifacts:
    paths:
      - public/build_ios.svg

unit_tests:
  script: ...
    - <generate public/unit_tests.svg>
  artifacts:
    paths:
      - public/unit_tests.svg

server_tests:
  script: ...
    - <generate public/server_tests.svg>
  artifacts:
    paths:
      - public/server_tests.svg

client_tests:
  script: ...
    - <generate public/client_tests.svg>
  artifacts:
    paths:
      - public/client_tests.svg
Run Code Online (Sandbox Code Playgroud)

3.将徽章发布到GitLab Pages

包括一个新的pages发布步骤,该步骤将公共目录中的所有内容部署到GitLab页面:

pages:
  stage: deploy
  artifacts:
    paths:
    - public
  only:
  - master
Run Code Online (Sandbox Code Playgroud)

您不需要修改上述内容.运行此作业后,public将通过GitLab页面Web服务器提供所有文件.这通常是http://NAMESPACE.GITLABPAGESSERVER/project

在此处阅读有关GitLab页面的更多信息:https://docs.gitlab.com/ce/user/project/pages/index.html

4.在README.md中包含徽章

当为项目运行主管道时,徽章文件将发布到GitLab页面,然后可以从项目中引用README.md.

为什么这可能没有意义

我理解为什么你会问这个问题,但我想解释你为什么不想这样做.

GitLab管道在每次推送到项目时运行 - 在每个分支上.通常,您只想从master分支(或发布)分支为README文件生成标记,因此您将限制页面步骤仅运行master@group/project.

还要考虑通常将管道配置为在作业发生错误时停止.这意味着如果主管道作业失败,则不会生成该管道的标记,因此无法确定哪个作业失败.

获得即时反馈的最佳位置是在管道视图中,您可以通过管道链接将管道成功徽章添加到自述文件中,通常类似于 https://gitlabserver/namespace/project/badges/branch/build.svg

如果您仍想使用您所描述的方法,那么我的建议是将每个管道阶段设置为允许失败.这将允许完整的管道运行,尽管任何作业都出现故障,并且徽章仍然应该生成,并发布到Pages.


kub*_*uch 8

我开发了一种针对实时每个工作徽章的解决方案。它可以很容易地修改成其他任何东西。

示例存储库:ci-test/badges。还有一个完整的演练,所以我不会在这里复制粘贴。

核心思想是(假设你现在正在运行 CI 作业):

  • 从网络获取徽章到文件中。
  • 将徽章文件上传到可以链接的实时存储(例如 Dropbox)。

Dropbox 支持通过 HTTP 请求调用其 API(请参阅)。因此,以上所有操作都可以使用例如curl 或Python requests 等基本工具来完成。您只需将 Dropbox 访问令牌作为秘密变量传递,并以相同名称保存文件即可覆盖旧徽章。

然后,您可以在任何需要的地方直接链接 Dropbox 徽章。它有一些技巧,所以如果您想使用它,请务必检查我的示例存储库。对我来说它工作得很好而且似乎很快。

这种方法的优点是您不必弄乱 GitLab Pages。您不是在 Pages 上发布,而是将其发布到 Dropbox。这是一个由 HTTP 请求调用的简单文件传输。没有更多了。


jcg*_*ret 7

您可以按照JGC的步骤进行操作,但不是在Gitlab页面的公共目录上部署徽章,而是可以直接链接到最新的构建工件.

例如,以下URL链接到使用anybadge创建并作为工件上载的pylint标记.

HTTPS://gitlabserver/namespace/project/-/jobs/artifacts/master/raw/public/pylint.svg工作=测试

  • 这对于公共项目非常有效。如果您对启用了安全性的项目使用此方法,则自述文件的查看者可能无法在未经身份验证的情况下访问工件。 (2认同)