如何在不使用个人凭据的情况下在 Gitlab CI 中创建 Git 标签?

2024-01-04

我使用的是 GitLab 企业版 14.6.5-ee

我想在将分支合并回时自动创建一个 Git 标签master。我对实际的 Git 命令很满意;问题在于身份验证:构建机器人不知道如何向服务器进行身份验证。有一个答案here https://stackoverflow.com/a/57730764/7850如何设置 SSH 密钥。但这需要我用我的personal凭据,这是错误的,因为它是not我创建标签;这是构建机器人。

说真的,这并不能sense说机器人不知道如何进行身份验证。我是说,它只是从存储库中提取了该死的代码!那么,为什么从能够做到这一点来说有如此大的飞跃pull代码能够push code?

有什么想法可以在不使用我的个人凭据的情况下自动创建标签吗?


CI jobs do有一个用于访问存储库的内置凭据令牌:$CI_JOB_TOKEN多变的。但是此令牌仅具有读取权限,因此无法创建标签。要写入存储库或 API,您必须向作业提供令牌或 SSH 密钥。但是,这不一定是您的个人令牌。

您可以通过几种方法进行身份验证以在不使用个人凭据的情况下写入项目:

  • 您可以使用项目访问令牌 https://docs.gitlab.com/ee/user/project/settings/project_access_tokens.html
  • 您可以使用组访问令牌 https://docs.gitlab.com/ee/user/group/settings/group_access_tokens.html-- 这些仅在 GitLab 14.7 之后在 UI 中公开
  • 您可以使用部署 SSH 密钥 https://docs.gitlab.com/ee/user/project/deploy_keys/(当您授予密钥读写权限时)

那么为什么从能够拉取代码到能够推送代码会有如此大的飞跃呢?

这或许是一件好事。虽然在这种情况下可能需要您做额外的工作,但内置作业授权会尝试应用最小特权原则。许多客户甚至认为现有的CI_JOB_TOKEN权限太宽松,因为它们允许访问读取其他项目!

无论如何,它都在 GitLab 的路线图上让这些权限更加可控、灵活 https://gitlab.com/groups/gitlab-org/-/epics/3559 :-)


或者,使用版本

如果您不介意除了标签之外还创建一个版本,您还可以使用release: keyword https://docs.gitlab.com/ee/ci/yaml/#release在 CI yaml 中作为创建标签的简单方法。

有点讽刺的是发布API https://docs.gitlab.com/ee/api/releases/允许您使用内置的CI_JOB_TOKEN创建版本(大概还有标签),但你不能(据我所知)使用CI_JOB_TOKEN在标签 API 上创建标签。

然而,在这种情况下,它仍然会产生发布/标签似乎是由you.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不使用个人凭据的情况下在 Gitlab CI 中创建 Git 标签? 的相关文章

随机推荐