受保护的容器标签

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署
  • Status: 实验
History
    • 引入于极狐GitLab 17.9,使用名为 container_registry_protected_tags功能标志。默认情况下禁用。此功能是一个实验功能
    • 在极狐GitLab 17.10 中,为 JihuLab.com 启用。
    • 在极狐GitLab 17.11 中 GA。功能标志 container_registry_protected_tags 被移除。
此功能的可用性受控于功能标志。更多详情,可以查看历史。此功能仅为测试可用,不适用于生产环境。

控制谁可以在你的项目中推送和删除容器标签。

默认情况下,拥有开发者角色或更高角色的用户可以在所有项目容器存储库中推送和删除镜像标签。通过标签保护规则,你可以:

  • 限制特定用户角色推送和删除标签。
  • 每个项目最多创建 5 条保护规则。
  • 将这些规则应用于项目中的所有容器存储库。

当至少有一个保护规则与其名称匹配时,标签即被保护。如果多个规则匹配,则应用最严格的规则。

受保护的标签无法被清理策略删除。

先决条件#

在你可以使用受保护的容器标签之前:

  • 你必须使用新版本的容器仓库:

创建保护规则#

先决条件:

  • 你必须至少拥有维护者角色

要创建保护规则:

  1. 在左侧边栏,选择 搜索或转到 并找到你的项目。
  2. 选择 设置 > 软件包和仓库
  3. 展开 容器镜像仓库
  4. 受保护的容器标签 下,选择 添加保护规则
  5. 完成字段:
    • 保护容器标签匹配:使用 RE2 语法输入正则表达式模式。模式不得超过 100 个字符。参见正则表达式模式示例
    • 允许推送的最小角色:选择维护者、拥有者或管理员。
    • 允许删除的最小角色:选择维护者、拥有者或管理员。
  6. 选择 添加规则

保护规则被创建,匹配的标签被保护。

正则表达式模式示例#

你可以使用以下示例模式来保护容器标签:

模式描述
.*保护所有标签
^v.*保护以 "v" 开头的标签(例如 v1.0.0v2.1.0-rc1
\d+\.\d+\.\d+保护语义版本标签(例如 1.0.02.1.0
^latest$保护 latest 标签
.*-stable$保护以 "-stable" 结尾的标签(例如 1.0-stablemain-stable
stable|release保护包含 "stable" 或 "release" 的标签(例如 1.0-stable

删除保护规则#

先决条件:

  • 你必须至少拥有维护者角色

要删除保护规则:

  1. 在左侧边栏,选择 搜索或转到 并找到你的项目。
  2. 选择 设置 > 软件包和仓库
  3. 展开 容器镜像仓库
  4. 受保护的容器标签 下,在你想要删除的保护规则旁边,选择 删除 ()。
  5. 当提示确认时,选择 删除

保护规则被删除,匹配的标签不再受保护。

传播延迟#

规则更改依赖于 JWT 令牌在服务之间传播。因此,保护规则和用户访问角色的更改可能只有在当前 JWT 令牌过期后才生效。延迟等于配置的令牌持续时间

大多数容器仓库客户端(包括 Docker、极狐GitLab UI 和 API)每次操作请求一个新令牌,但自定义客户端可能会保留令牌的全部有效期。

镜像清单删除#

极狐GitLab UI 和 API 不支持直接删除镜像清单。通过直接容器仓库 API 调用,清单删除会影响所有相关标签。

为了确保标签保护,仅当:

  • 标签保护被禁用
  • 用户有权限删除任何受保护标签

时才允许直接删除清单请求。

删除容器镜像#

如果满足以下所有条件,你无法删除容器镜像

  • 容器镜像有标签。
  • 项目有容器仓库标签保护规则。
  • 你的访问级别低于任何规则中定义的 minimum_access_delete_level

此限制适用于无论规则模式是否匹配容器镜像标签。