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

标签

  • 版本:免费版, 高级版, 企业版
  • 提供方式:GitLab.com, GitLab 自托管, GitLab 专属

在 Git 中,标签用于标记代码库历史中的一个重要节点。 Git 支持两种类型的标签:

  • 轻量级标签指向特定的提交,不包含其他信息。 也称为软标签。可根据需要创建或删除它们。
  • 带注释的标签包含元数据,可以进行签名以进行验证,并且不能被修改。

标签的创建或删除可以用作自动化的触发器,包括:

当你 创建发布 时,GitLab 也会创建一个标签来标记发布点。 许多项目会将带注释的发布标签与稳定分支结合使用。考虑自动设置部署或发布标签。

在 GitLab UI 中,每个标签会显示:

Example of a single tag

  • 标签名称。( tag )
  • 可选。如果标签是 受保护的,则会显示一个 受保护 徽章。
  • 提交的 SHA ( commit ),链接到提交的内容。
  • 提交的标题和创建日期。
  • 可选。指向发布的链接 ( rocket )。
  • 可选。如果已运行流水线,则显示当前的流水线状态。
  • 与标签关联的源代码和制品的下载链接。
  • 创建发布 ( pencil ) 链接。
  • 删除标签的链接。

查看项目的标签

要查看项目的所有现有标签:

  1. 在左侧边栏,选择 搜索或跳转至 并找到你的项目。
  2. 选择 代码 > 标签

在提交列表中查看带标签的提交

  1. 在左侧边栏,选择 搜索或跳转至 并找到你的项目。

  2. 选择 代码 > 提交

  3. 带有标签的提交会使用标签图标 ( tag ) 和标签名称进行标记。 此示例显示了一个标记为 v1.26.0 的提交:

    A tagged commit in the Commits view

要查看此标签中的提交列表,请选择标签名称。

创建标签

可以通过命令行或 GitLab UI 创建标签。

通过命令行

要通过命令行创建轻量级或带注释的标签并将其推送到远程仓库:

  1. 要创建轻量级标签,请运行命令 git tag TAG_NAME,并将 TAG_NAME 更改为你想要的标签名称。

  2. 要创建带注释的标签,请从命令行运行 git tag 的其中一个版本:

    # 在此简短版本中,带注释的标签名称为 "v1.0",
    # 消息为 "Version 1.0"。
    git tag -a v1.0 -m "Version 1.0"
    
    # 使用此版本在你的文本编辑器中为带注释的标签 "v1.0" 编写更长的标签消息。
    git tag -a v1.0
  3. 使用 git push origin --tags 将你的标签推送到远程仓库。

通过 UI

要通过 GitLab UI 创建标签:

  1. 在左侧边栏,选择 搜索或跳转至 并找到你的项目。
  2. 选择 代码 > 标签
  3. 选择 新建标签
  4. 输入 标签名称
  5. 对于 基于,选择一个现有的分支名称、标签或提交 SHA。
  6. 可选。添加 消息 以创建带注释的标签,或留空以创建轻量级标签。
  7. 选择 创建标签

为你的标签命名

Git 强制执行 标签名称规则,以确保标签名称与其他工具保持兼容。 GitLab 对标签名称有额外的要求,并为结构良好的标签名称提供优势。

GitLab 对所有标签强制执行以下额外规则:

  • 标签名称中不允许有空格。
  • 禁止以 40 或 64 个十六进制字符开头的标签名称,因为它们与 Git 提交哈希值相似。
  • 标签名称不能以 -, refs/heads/, refs/tags/, 或 refs/remotes/ 开头
  • 标签名称区分大小写。

防止标签删除

  • 版本:高级版, 企业版
  • 提供方式:GitLab.com, GitLab 自托管, GitLab 专属

要防止用户使用 git push 删除标签,请创建一个 推送规则

从标签触发流水线

GitLab CI/CD 提供了一个预定义变量 CI_COMMIT_TAG,用于在流水线配置中识别标签。 你可以在作业规则和工作流规则中使用此变量,来测试流水线是否由标签触发。

默认情况下,如果你的 CI/CD 作业没有特定的规则,它们会被包含在任何新创建标签的标签流水线中。

在你的项目 CI/CD 流水线配置文件 .gitlab-ci.yml 中,你可以使用 CI_COMMIT_TAG 变量来控制新标签的流水线:

  • 在作业级别使用 rules:if
  • 在流水线级别使用 workflow 关键字。

在标签流水线中触发安全扫描

默认情况下,扫描执行策略仅在分支上运行,而不是标签。但是,你可以配置流水线执行策略,以在标签上运行安全扫描。

要在标签上运行安全扫描:

  1. 创建一个 CI/CD 配置 YAML 文件,其中包含扩展了安全扫描器模板的自定义作业,并包含在标签上运行的规则。
  2. 创建一个流水线执行策略,将此配置注入到你的流水线中。

示例:流水线执行策略

此示例展示了如何创建一个在标签上运行依赖扫描和 SAST 扫描的流水线执行策略:

pipeline_execution_policy:
- name: Pipeline Execution Policy
  description: Run security scans on tags
  enabled: true
  pipeline_config_strategy: inject_policy
  content:
    include:
    - project: <Project path to YAML>
      file: tag-security-scans.yml
  skip_ci:
    allowed: false

示例:CI/CD 配置

此示例展示了如何扩展安全扫描器作业,使其在标签上运行:

include:
  - template: Jobs/Dependency-Scanning.gitlab-ci.yml
  - template: Jobs/SAST.gitlab-ci.yml

# 扩展依赖扫描,使其在标签上运行
gemnasium-python-dependency_scanning_tags:
  extends: gemnasium-python-dependency_scanning
  rules:
    - if: $CI_COMMIT_TAG

# 扩展 SAST 扫描,使其在标签上运行
semgrep-sast_tags:
  extends: semgrep-sast
  rules:
    - if: $CI_COMMIT_TAG

# 仅在标签上运行的自定义作业示例
policy_job_for_tags:
  script:
    - echo "This job runs only on tags"
  rules:
    - if: $CI_COMMIT_TAG

# 在所有流水线上运行的作业示例
policy_job_always:
  script:
    - echo "This policy job runs always."

相关主题