Help us learn about your current experience with the documentation. Take the survey.

部署令牌

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

部署令牌提供对 GitLab 资源的安全访问,而无需将权限绑定到单个用户账户。您可以将它们与 Git 操作、容器注册表和包注册表一起使用,为部署自动化提供精确所需的访问权限。

使用部署令牌,您可以获得:

  • 通过从自动化系统中移除个人凭据,实现更安全的部署
  • 为每个令牌提供特定权限的细粒度访问控制
  • 使用内置认证变量简化 CI/CD 管道
  • 可靠的部署流程,不会因团队成员变动而中断
  • 通过专用令牌身份跟踪部署,提供更好的审计跟踪
  • 与外部构建系统和部署工具的无缝集成

部署令牌是一对值:

  • 用户名:HTTP 认证框架中的 username。默认用户名格式为 gitlab+deploy-token-{n}。创建部署令牌时,您可以指定自定义用户名。
  • 令牌:HTTP 认证框架中的 password

部署令牌不支持 SSH 认证

您可以将部署令牌用于对以下端点的 HTTP 认证

您可以在项目级别或组级别创建部署令牌:

  • 项目部署令牌:权限仅适用于项目。
  • 组部署令牌:权限适用于组中的所有项目。

默认情况下,部署令牌不会过期。创建时,您可以可选地设置过期日期。过期时间在该日期的 UTC 午夜发生。

如果启用了 外部授权,您不能使用新的或现有的部署令牌进行 Git 操作和包注册表操作。

范围

部署令牌的范围决定了它可以执行的操作。

范围 描述
read_repository 使用 git clone 对仓库进行只读访问。
read_registry 对项目 容器注册表 中的镜像进行只读访问。
write_registry 对项目的 容器注册表 进行写入(推送)访问。推送镜像需要同时具有读写权限。
read_virtual_registry 如果项目是私有的且需要授权,则通过 依赖代理 授予对容器镜像的只读(拉取)访问权限。仅在依赖代理启用时可用。
write_virtual_registry 如果项目是私有的且需要授权,则通过 依赖代理 授予对容器镜像的读取(拉取)、写入(推送)和删除权限。仅在依赖代理启用时可用。
read_package_registry 对项目的包注册表进行只读访问。
write_package_registry 对项目的包注册表进行写入访问。

GitLab 部署令牌

GitLab 部署令牌是一种特殊类型的部署令牌。如果您创建一个名为 gitlab-deploy-token 的部署令牌,该令牌会自动作为变量暴露给项目的 CI/CD 作业:

  • CI_DEPLOY_USER:用户名
  • CI_DEPLOY_PASSWORD:令牌

例如,使用 GitLab 令牌登录到您的 GitLab 容器注册表:

echo "$CI_DEPLOY_PASSWORD" | docker login $CI_REGISTRY -u $CI_DEPLOY_USER --password-stdin

在 GitLab 15.0 及更早版本中,gitlab-deploy-token 部署令牌的特殊处理不适用于组部署令牌。要使组部署令牌可用于 CI/CD 作业,请在 设置 > CI/CD > 变量 中将 CI_DEPLOY_USERCI_DEPLOY_PASSWORD CI/CD 变量设置为组部署令牌的名称和令牌。

当在组中定义 gitlab-deploy-token 时,CI_DEPLOY_USERCI_DEPLOY_PASSWORD CI/CD 变量仅对该组的直接子项目可用。

部署令牌过期

此功能的可用性由功能标志控制。 有关更多信息,请参阅历史记录。

部署令牌在您定义的日期的 UTC 00:00 过期。

GitLab 每天在 UTC 01:00 检查即将过期的部署令牌。 项目所有者和维护者会在这些令牌过期前 60、30 和 7 天收到电子邮件通知。

这些电子邮件通知仅对活动(未撤销)的部署令牌在每个间隔发送一次。

GitLab 部署令牌安全性

GitLab 部署令牌是长期有效的,这使得它们对攻击者具有吸引力。

为防止部署令牌泄露,您还应配置您的 运行器 以确保安全:

  • 如果机器被重复使用,避免使用 Docker privileged 模式。
  • 当作业在同一台机器上运行时,避免使用 shell 执行器

不安全的 GitLab Runner 配置会增加有人可以从其他作业中窃取令牌的风险。

GitLab 公共 API

部署令牌不能与 GitLab 公共 API 一起使用。但是,您可以将部署令牌与某些端点一起使用,例如包注册表中的端点。您可以通过 URL 中包含字符串 packages/<format> 来识别端点属于包注册表。例如:https://gitlab.example.com/api/v4/projects/24/packages/generic/my_package/0.0.1/file.txt。有关更多信息,请参阅 使用注册表进行认证

创建部署令牌

创建部署令牌以可以独立于用户账户运行的自动化部署任务。

先决条件:

  • 要创建组部署令牌,您必须拥有该组的所有者角色。
  • 要创建项目部署令牌,您必须拥有该项目的至少维护者角色。
  1. 在左侧边栏,选择 搜索或转到 并找到您的项目或组。
  2. 选择 设置 > 仓库
  3. 展开 部署令牌
  4. 选择 添加令牌
  5. 完成字段,并选择所需的 范围
  6. 选择 创建部署令牌

记录部署令牌的值。离开或刷新页面后,您将无法再次访问它

撤销部署令牌

当令牌不再需要时,请撤销它。

先决条件:

  • 要撤销组部署令牌,您必须拥有该组的所有者角色。
  • 要撤销项目部署令牌,您必须拥有该项目的至少维护者角色。

要撤销部署令牌:

  1. 在左侧边栏,选择 搜索或转到 并找到您的项目或组。
  2. 选择 设置 > 仓库
  3. 展开 部署令牌
  4. 活动部署令牌 部分,在要撤销的令牌旁边,选择 撤销

克隆仓库

您可以使用部署令牌克隆仓库。

先决条件:

  • 具有 read_repository 范围的部署令牌。

使用部署令牌克隆仓库的示例:

git clone https://<username>:<deploy_token>@gitlab.example.com/tanuki/awesome_project.git

从容器注册表拉取镜像

您可以使用部署令牌从容器注册表拉取镜像。

先决条件:

  • 具有 read_registry 范围的部署令牌。

使用部署令牌从容器注册表拉取镜像的示例:

echo "$DEPLOY_TOKEN" | docker login -u <username> --password-stdin registry.example.com
docker pull $CONTAINER_TEST_IMAGE

向容器注册表推送镜像

您可以使用部署令牌向容器注册表推送镜像。

先决条件:

  • 具有 read_registrywrite_registry 范围的部署令牌。

使用部署令牌向容器注册表推送镜像的示例:

echo "$DEPLOY_TOKEN" | docker login -u <username> --password-stdin registry.example.com
docker push $CONTAINER_TEST_IMAGE

从包注册表拉取包

您可以使用部署令牌从包注册表拉取包。

先决条件:

  • 具有 read_package_registry 范围的部署令牌。

对于您选择的 包类型,请遵循部署令牌的认证说明。

从 GitLab 注册表安装 NuGet 包的示例:

nuget source Add -Name GitLab -Source "https://gitlab.example.com/api/v4/projects/10/packages/nuget/index.json" -UserName <username> -Password <deploy_token>
nuget install mypkg.nupkg

向包注册表推送包

您可以使用部署令牌向 GitLab 包注册表推送包。

先决条件:

  • 具有 write_package_registry 范围的部署令牌。

对于您选择的 包类型,请遵循部署令牌的认证说明。

向包注册表发布 NuGet 包的示例:

nuget source Add -Name GitLab -Source "https://gitlab.example.com/api/v4/projects/10/packages/nuget/index.json" -UserName <username> -Password <deploy_token>
nuget push mypkg.nupkg -Source GitLab

从依赖代理拉取镜像

您可以使用部署令牌从依赖代理拉取镜像。

先决条件:

  • 具有 read_registrywrite_registry 范围的部署令牌。

遵循依赖代理 认证说明