部署令牌

部署令牌允许您下载(git clone)或推送拉取项目的软件包和容器镜像库镜像,而无需用户和密码。

部署令牌只能由具有维护者角色的用户管理。

部署令牌不能与极狐GitLab 公共 API 一起使用。但是,您可以将部署令牌与某些端点一起使用,例如来自软件包库的端点。有关详细信息,请参阅使用软件包库进行身份验证

部署令牌与项目相关联并保持启用状态,即使创建令牌的用户已从项目中删除。

如果您有密钥对,您可能希望使用部署密钥代替。

创建部署令牌

您可以从项目设置中创建任意数量的部署令牌。或者,您也可以创建群组范围的部署令牌

  1. 登录您的 GitLab 帐户。
  2. 在顶部栏上,选择 Menu > ProjectsMenu > Groups 以查找您的项目或组。
  3. 在左侧边栏上,选择设置 > 存储库
  4. 展开部署令牌
  5. 为令牌选择一个名称,还可以选择到期日期和用户名。
  6. 选择 期望范围
  7. 选择创建部署令牌

将部署令牌保存在安全的地方。 离开或刷新页面后,无法再次访问

Personal access tokens page

部署令牌过期

部署令牌在您定义的日期的 UTC 午夜到期。

撤销部署令牌

要撤销部署令牌:

  1. 在顶部栏上,选择 菜单 > 项目菜单 > 群组,查找您的项目或群组。
  2. 在左侧边栏上,选择 设置 > 仓库
  3. 展开 部署令牌
  4. 可用部署令牌 部分,通过您要撤销的令牌,选择 撤销

限制部署令牌的范围

可以使用不同的范围创建部署令牌,这些范围包含允许令牌可以执行的各种操作。下表描述了可用的范围以及引入的版本:

范围 描述 引入版本
read_repository 允许通过 git clone 对仓库进行读取访问
read_registry 如果项目是私有的并且需要授权,则允许对容器镜像库镜像进行读取访问。
write_registry 允许对容器镜像库进行写访问(推送)。 12.10
read_package_registry 允许对软件包库进行读取访问。 13.0
write_package_registry 允许对软件包库进行写访问。 13.0

部署令牌自定义用户名

默认用户名格式为 gitlab+deploy-token-{n}。一些工具或平台可能不支持这种格式,在这种情况下,您可以指定创建部署令牌时要使用的自定义用户名。

使用

Git 克隆一个仓库

要使用部署令牌下载仓库:

  1. 创建一个以 read_repository 为范围的部署令牌。
  2. 记下您的 usernametoken
  3. git clone 使用部署令牌的项目:

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

<username><deploy token> 替换为正确的值。

读取 Container Registry 镜像

要读取容器镜像库镜像,您必须:

  1. 创建一个以 read_registry 为范围的部署令牌。
  2. 记下您的 usernametoken
  3. 使用部署令牌登录 Container Registry:
docker login -u <username> -p <deploy_token> registry.example.com

<username><deploy token> 替换为正确的值。您现在可以从 Container Registry 中拉取镜像。

推送 Container Registry 镜像

要推送容器镜像库镜像,您必须:

  1. 创建一个以 write_registry 为范围的部署令牌。
  2. 记下您的 usernametoken
  3. 使用部署令牌登录 Container Registry:

    docker login -u <username> -p <deploy_token> registry.example.com
    

<username><deploy token> 替换为正确的值。您现在可以向 Container Registry 推送镜像。

读取或拉取软件包

要在软件包库中提取软件包,您必须:

  1. 创建一个以 read_package_registry 为范围的部署令牌。
  2. 记下您的 usernametoken
  3. 对于您选择的包类型,按照部署令牌的身份验证说明进行操作。

使用部署令牌发布 NuGet 包的示例请求:

nuget source Add -Name GitLab -Source "https://gitlab.example.com/api/v4/projects/10/packages/nuget/index.json" -UserName deploy-token-username -Password 12345678asdf

nuget push mypkg.nupkg -Source GitLab

推送或上传软件包

要在软件包库中上传软件包,您必须:

  1. 创建一个以 write_package_registry 作为范围的部署令牌。
  2. 记下您的 usernametoken
  3. 对于您选择的包类型,按照部署令牌的身份验证说明进行操作。

群组部署令牌

在群组级别创建的部署令牌可用于属于特定群组或其子组之一的所有项目。

群组部署令牌 UI 现在可在 设置 > 仓库 下访问。

要使用群组部署令牌:

  1. 创建群组部署令牌。
  2. 克隆仓库时,使用方式与项目部署令牌相同。

克隆相关项目的仓库时,应用于群组部署令牌(例如 read_repository)的范围一致。

从依赖代理中拉取镜像

引入于 14.2 版本。

要从依赖代理中拉取镜像,您必须:

  1. 创建一个包含 read_registrywrite_registry 范围的群组部署令牌。
  2. 记下您的 usernametoken
  3. 遵循 Dependency Proxy 身份验证说明

gitlab deploy token

在群组级别对 gitlab-deploy-token 的支持引入于 15.1 版本,功能标志为 ci_variable_for_group_gitlab_deploy_token。默认启用。

部署令牌时有一种特殊情况。如果用户创建一个名为 gitlab-deploy-token 的令牌,则部署令牌的用户名和令牌会自动作为 CI/CD 变量暴露给 CI/CD 作业:分别为 CI_DEPLOY_USERCI_DEPLOY_PASSWORD

创建令牌后,您可以使用以下变量登录 Container Registry:

docker login -u $CI_DEPLOY_USER -p $CI_DEPLOY_PASSWORD $CI_REGISTRY
note在 15.0 及更早版本中,gitlab-deploy-token 部署令牌的特殊处理不适用于群组部署令牌。要使群组级部署令牌可用于 CI/CD 作业,必须在 设置 > CI/CD > 变量 中将 CI_DEPLOY_USERCI_DEPLOY_PASSWORD CI/CD 变量分别设置为群组部署令牌的名称和令牌。

故障排除

群组部署令牌和 LFS

存在一个错误阻止群组部署令牌克隆 LFS 对象。 如果您收到 404 Not Found 错误和以下错误,请使用项目部署令牌来解决该错误:

api error: Repository or object not found:
https://<URL-with-token>.git/info/lfs/objects/batch
Check that it exists and that you have proper access to it