You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI:特定阶段完成后为流水线添加自定义标签/徽章

当然可以实现!给GitLab流水线添加专属自定义徽章的方案

完全能做到你想要的效果——当特定阶段成功完成后,给目标流水线添加自定义徽章,并且保证同一时间只有一个流水线拥有这个徽章。下面我给你拆解具体的实现步骤:

核心思路

利用GitLab的API实现两个关键操作:

  1. 当目标阶段(比如部署阶段)成功后,给当前流水线添加指定标签/徽章
  2. 同时移除所有其他流水线的同类型徽章,确保唯一性

具体实现步骤

1. 准备API访问权限

首先需要生成一个具备api权限的访问令牌:

  • 可以在GitLab个人设置里创建个人访问令牌(PAT),或者在项目设置里创建项目级访问令牌
  • 把令牌存储到项目的CI/CD变量中(比如命名为GITLAB_API_TOKEN),避免明文泄露

2. 配置CI/CD脚本

在你的.gitlab-ci.yml文件中,添加一个专门处理徽章的job,依赖于你要触发的目标阶段(比如部署成功的job):

add_last_deploy_badge:
  stage: deploy  # 和你的部署阶段保持一致
  needs: ["your_deployment_job"]  # 替换成实际的部署job名称
  script:
    - |
      # 先安装jq工具(如果runner镜像没有预装的话)
      apt-get update && apt-get install -y jq

      # 1. 获取所有带有"last deploy"徽章的流水线ID
      PIPELINE_IDS=$(curl --header "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" \
        "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/pipelines?per_page=100" \
        | jq -r '.[] | select(.labels[]? == "last deploy") | .id')
      
      # 2. 批量移除这些流水线的"last deploy"徽章
      for ID in $PIPELINE_IDS; do
        curl --request DELETE --header "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" \
          "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/pipelines/${ID}/labels/last%20deploy"
      done
      
      # 3. 给当前成功的流水线添加"last deploy"徽章
      curl --request POST --header "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" \
        "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/pipelines/${CI_PIPELINE_ID}/labels" \
        --data "labels=last deploy"
  only:
    - main  # 替换成你要触发的分支/标签规则
  when: on_success  # 只有当前面的部署job成功时才执行

3. 设置徽章自定义颜色

GitLab的流水线标签支持自定义颜色,你需要预先在项目中配置好:

  1. 进入项目的 Settings > Repository > Labels
  2. 新建一个标签,名称填last deploy,选择你想要的颜色(比如蓝色、绿色)
  3. 保存后,后续通过API添加这个标签时,就会自动显示你设置的颜色了

注意事项

  • 确保你的访问令牌拥有足够权限:需要api范围,以及项目的maintainer或更高权限
  • 如果你的流水线数量极多,可以调整per_page参数或者添加分页逻辑来覆盖所有旧流水线
  • 可以根据需求调整only规则,比如只在特定标签或合并请求触发时执行这个job

这样配置后,每次部署阶段成功完成,当前流水线就会带上"last deploy"彩色徽章,同时之前的同类型徽章会被自动移除,完美实现你要的效果!

内容的提问来源于stack exchange,提问作者Dieter Casier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:53:59