标签
- 版本:免费版, 高级版, 企业版
- 提供方式:GitLab.com, GitLab 自托管, GitLab 专属
在 Git 中,标签用于标记代码库历史中的一个重要节点。 Git 支持两种类型的标签:
- 轻量级标签指向特定的提交,不包含其他信息。 也称为软标签。可根据需要创建或删除它们。
- 带注释的标签包含元数据,可以进行签名以进行验证,并且不能被修改。
标签的创建或删除可以用作自动化的触发器,包括:
- 使用 webhook 自动执行 Slack 通知等操作。
- 通知 代码库镜像 进行更新。
- 使用
if: $CI_COMMIT_TAG运行 CI/CD 流水线。
当你 创建发布 时,GitLab 也会创建一个标签来标记发布点。 许多项目会将带注释的发布标签与稳定分支结合使用。考虑自动设置部署或发布标签。
在 GitLab UI 中,每个标签会显示:
- 标签名称。( )
- 可选。如果标签是 受保护的,则会显示一个 受保护 徽章。
- 提交的 SHA ( ),链接到提交的内容。
- 提交的标题和创建日期。
- 可选。指向发布的链接 ( )。
- 可选。如果已运行流水线,则显示当前的流水线状态。
- 与标签关联的源代码和制品的下载链接。
- 创建发布 ( ) 链接。
- 删除标签的链接。
查看项目的标签
要查看项目的所有现有标签:
- 在左侧边栏,选择 搜索或跳转至 并找到你的项目。
- 选择 代码 > 标签。
在提交列表中查看带标签的提交
要查看此标签中的提交列表,请选择标签名称。
创建标签
可以通过命令行或 GitLab UI 创建标签。
通过命令行
要通过命令行创建轻量级或带注释的标签并将其推送到远程仓库:
-
要创建轻量级标签,请运行命令
git tag TAG_NAME,并将TAG_NAME更改为你想要的标签名称。 -
要创建带注释的标签,请从命令行运行
git tag的其中一个版本:# 在此简短版本中,带注释的标签名称为 "v1.0", # 消息为 "Version 1.0"。 git tag -a v1.0 -m "Version 1.0" # 使用此版本在你的文本编辑器中为带注释的标签 "v1.0" 编写更长的标签消息。 git tag -a v1.0 -
使用
git push origin --tags将你的标签推送到远程仓库。
通过 UI
要通过 GitLab UI 创建标签:
- 在左侧边栏,选择 搜索或跳转至 并找到你的项目。
- 选择 代码 > 标签。
- 选择 新建标签。
- 输入 标签名称。
- 对于 基于,选择一个现有的分支名称、标签或提交 SHA。
- 可选。添加 消息 以创建带注释的标签,或留空以创建轻量级标签。
- 选择 创建标签。
为你的标签命名
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 变量来控制新标签的流水线:
在标签流水线中触发安全扫描
默认情况下,扫描执行策略仅在分支上运行,而不是标签。但是,你可以配置流水线执行策略,以在标签上运行安全扫描。
要在标签上运行安全扫描:
- 创建一个 CI/CD 配置 YAML 文件,其中包含扩展了安全扫描器模板的自定义作业,并包含在标签上运行的规则。
- 创建一个流水线执行策略,将此配置注入到你的流水线中。
示例:流水线执行策略
此示例展示了如何创建一个在标签上运行依赖扫描和 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."