理解Gitlab CI标签

68

我已经阅读了文档和一些文章,你可能会认为我很蠢,但这是我第一次使用这样的概念。

  • 我已经注册了标签为“testing”的runner
  • 在gitlab中创建了标签“testing”
  • 将该runner绑定到特定项目
  • 我还在本地repo中添加了相同的标签,例如“testing”

但是我的作业如何运行与这些标签有关?所有这些操作都是必要的吗?如果我向repo推送新代码,无论如何*.yml文件都会被执行,根据我的测试。

那么如果我只想在提交版本时运行构建怎么办?

IDK...

   git commit --tags "v. 2.0" -m "this is version 2.0" (probably not right)

当然,它应该是通用的,这样我就不必总是告诉使用哪个标签来触发运行器,但例如让它识别数字值。

正如您所看到的,我相当困惑...如果您能详细说明标签的工作原理,以便我能够理解这个概念,我将不胜感激。

3个回答

95

GitLab CI 和 Git 的标签是两个不同的概念。

当您编写.gitlab-ci.yml文件时,可以使用标签testing指定某些作业。如果有一个带有此标签的运行程序可用,则它将接管该作业。

在 Git 中,在您的存储库中,标签用于标记特定的提交。通常用于标记版本。

当您使用标签(在 Git 中)启动 GitLab CI 中的流水线时,这两个概念可能会混淆。在您的.gitlab-ci.yml文件中,可以使用标有tagsonly部分来指定。

请查阅GitLab 标签文档only

例如,当您使用 git 推送标签时:

$ git tag -a 1.0.0 -m "1.0.0"
$ git push origin 1.0.0

并且在 .gitlab-ci.yml 文件中的工作如下:

compile:
    stage: build
    only: [tags]
    script:
        - echo Working...
    tags: [testing]    

我建议您开始使用带有 testing 标签的 runner。

根据我的理解,您遗漏了一个步骤,就是将标签 testing 指定给您的 runner。要实现这一点,请进入 GitLab 并打开您的项目。在Wiki旁边,点击设置。 转到CI/CD Pipelines,然后就可以找到您的 runner(s)。 在其 Guid 旁边,点击笔图标。在接下来的页面上,可以修改标签。


创建运行器时,我需要指定标签吗? - user1933178
是的,这可以在注册时在runner端完成。之后,如果您想编辑runner的配置(包括标签),则需要在项目上拥有权限,并且更改是在gitlab服务器端完成的。在列出该项目的runner的页面中,您会看到一个小的编辑图标(一支铅笔),点击它将带您到可以编辑标签的页面。 - liberforce
1
我使用了GitLab Runner来构建DEB文件,并最终使用了这些标签 - 它也接受正则表达式: tags:
  • /^.build_v..$/ 即使是分配给GitLab Runner本身的标签也必须配置为捕获此类型的正则表达式。然后,我使用版本号来构建我的软件包。因此,如果我提交了一个带有“build_vX.Y.Z”的标签,Runner就会启动。
- RiddleMeThis

5

所有这些操作都是必要的吗?

不是的,如果您只有一个runner,或者您有很多但不在乎哪个runner运行您的作业,那么标记runner/作业就没有意义。

那么,如果我想仅在提交中定义版本时运行构建怎么办?

job:
  only:
    - tags

2

Gitlab-tag: 用于标识特定的runner以运行您的作业。参考 Git-tag: 为提交版本进行版本控制。参考

推送新repo

  • 通常会通过类似pycharm的git客户端完成(使用当前示例)
  • 创建/更新代码
  • 提交
  • 为提交设置git-tag
  • enter image description here
  • 连同标签一起将其推送到远程
  • enter image description here
  • 在客户端应用程序中检查日志,例如在pycharm中:
  • enter image description here
  • 现在在gitlab->Repo->tags中检查相同的内容
  • enter image description here
  • 在gitlab作业中,可以使用export来查看相同的内容,作业结果如下:
  • enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接