如何在不使用个人凭据的情况下在 Gitlab CI 中创建 Git 标签?
How to create a Git tag in Gitlab CI without using personal credentials?
我正在使用 Git实验室企业版 14.6.5-ee
我想在将分支合并回 master
时自动创建一个 Git 标签。我对实际的 Git 命令没意见;问题在于身份验证:构建机器人不知道如何向服务器进行身份验证。有一个答案 如何设置 SSH 密钥。但这需要我使用我的 个人 凭据,这是错误的,因为它是 而不是 我创建的标签;这是构建机器人。
说真的, 说机器人不知道如何进行身份验证是没有意义的。我的意思是,它只是从 repo 中提取了该死的代码! 那么,为什么从能够 提取 代码到成为能够推送代码?
有没有关于如何在不使用我的个人凭据的情况下自动创建标签的想法?
CI 作业 do 有一个用于访问存储库的内置凭证令牌:$CI_JOB_TOKEN
变量。但是,此令牌只有读取权限,因此无法创建标签。要写入存储库或 API,您必须为作业提供令牌或 SSH 密钥。但是,这不一定是您的个人令牌。
有几种方法可以在不使用个人凭据的情况下对项目进行身份验证:
- 您可以使用project access tokens
- 你可以使用 group access tokens -- 这些仅在 GitLab 14.7
之后的 UI 中公开
- 您可以使用 deploy SSH keys(当您授予密钥 read-write 时)
So why is it such a big leap from being able to pull code to being able to push code?
这可能是一件好事。虽然在这种情况下可能需要您做额外的工作,但内置的作业授权会尝试应用最小权限原则。许多客户甚至认为现有的 CI_JOB_TOKEN
权限过于宽松,因为它们允许访问读取其他项目!
无论如何,它在 GitLab 的路线图上 make these permissions more controllable and flexible :-)
或者,使用版本
如果您不介意在标签之外创建一个版本,您也可以使用 CI yaml 中的 release:
keyword 作为创建标签的简单方法。
具有讽刺意味的是,releases API 允许您使用内置 CI_JOB_TOKEN
来创建版本(可能还有标签),但您不能(据我所知)使用 CI_JOB_TOKEN
在标签 API 上创建标签。
然而,在这种情况下,它仍然会产生 releases/tag 看起来是由 你 创建的效果。
我正在使用 Git实验室企业版 14.6.5-ee
我想在将分支合并回 master
时自动创建一个 Git 标签。我对实际的 Git 命令没意见;问题在于身份验证:构建机器人不知道如何向服务器进行身份验证。有一个答案
说真的, 说机器人不知道如何进行身份验证是没有意义的。我的意思是,它只是从 repo 中提取了该死的代码! 那么,为什么从能够 提取 代码到成为能够推送代码?
有没有关于如何在不使用我的个人凭据的情况下自动创建标签的想法?
CI 作业 do 有一个用于访问存储库的内置凭证令牌:$CI_JOB_TOKEN
变量。但是,此令牌只有读取权限,因此无法创建标签。要写入存储库或 API,您必须为作业提供令牌或 SSH 密钥。但是,这不一定是您的个人令牌。
有几种方法可以在不使用个人凭据的情况下对项目进行身份验证:
- 您可以使用project access tokens
- 你可以使用 group access tokens -- 这些仅在 GitLab 14.7 之后的 UI 中公开
- 您可以使用 deploy SSH keys(当您授予密钥 read-write 时)
So why is it such a big leap from being able to pull code to being able to push code?
这可能是一件好事。虽然在这种情况下可能需要您做额外的工作,但内置的作业授权会尝试应用最小权限原则。许多客户甚至认为现有的 CI_JOB_TOKEN
权限过于宽松,因为它们允许访问读取其他项目!
无论如何,它在 GitLab 的路线图上 make these permissions more controllable and flexible :-)
或者,使用版本
如果您不介意在标签之外创建一个版本,您也可以使用 CI yaml 中的 release:
keyword 作为创建标签的简单方法。
具有讽刺意味的是,releases API 允许您使用内置 CI_JOB_TOKEN
来创建版本(可能还有标签),但您不能(据我所知)使用 CI_JOB_TOKEN
在标签 API 上创建标签。
然而,在这种情况下,它仍然会产生 releases/tag 看起来是由 你 创建的效果。