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

如何追踪GitLab CI共享作业的执行次数及使用情况?

解决方案:追踪GitLab CI配置的包含与执行情况

一、GitLab内置方式的局限性

GitLab本身没有直接提供跨项目追踪include配置及对应作业执行的内置功能:

  • 审计日志仅记录单个项目内的操作(如修改CI配置、触发流水线),无法获取其他项目include你配置的记录。
  • 流水线和作业的元数据仅存储在调用方项目中,你无法直接访问,除非对方主动共享。

二、自建API的安全实现方案

如果通过自建API追踪执行情况,可通过以下方式确保请求合法性:

1. 利用GitLab CI_JOB_TOKEN验证

每个CI作业都会生成唯一的CI_JOB_TOKEN,你可以在API中验证该令牌的有效性:

  • 在上报请求中携带CI_JOB_TOKEN(比如放在请求头Authorization: Bearer $CI_JOB_TOKEN)。
  • 你的API收到请求后,调用GitLab的GET /api/v4/jobs/${CI_JOB_ID}接口(需匹配调用方的GitLab实例地址),验证令牌是否对应真实存在的作业,且作业状态合法。
  • 验证通过后,再记录CI_PROJECT_PATH(调用方项目路径)、CI_JOB_STARTED_AT(执行时间)等元数据。

2. IP白名单限制

只允许GitLab官方IP段访问你的API:

  • 从GitLab官方文档获取对应实例的IP范围(如GitLab.com的IP段)。
  • 在API服务器的防火墙、Nginx或负载均衡器中配置白名单,拒绝非GitLab IP的请求。

3. 简化的上报脚本示例

修改你的作业脚本,加入上报逻辑:

somejob:
  only: ["master"]
  script:
    - curl https://somegitlab/.../raw/.../analyse_code.sh
    - |
      # 上报执行信息到自建API
      curl -X POST https://your-tracking-api.com/log \
        -H "Authorization: Bearer $CI_JOB_TOKEN" \
        -H "Content-Type: application/json" \
        -d '{
          "project_path": "'"$CI_PROJECT_PATH"'",
          "job_id": "'"$CI_JOB_ID"'",
          "started_at": "'"$CI_JOB_STARTED_AT"'",
          "included_from": "my-group/my-project"
        }'
    - bash analyse_code.sh

三、其他可行建议

  1. 将上报逻辑嵌入分析脚本:把上报代码直接写到analyse_code.sh中,调用方无需修改CI作业,执行脚本即可自动上报,降低使用门槛。
  2. 使用GitLab CI模板规范调用:将你的作业定义为CI模板(如在你的项目中创建templates/code-analysis.yml),让调用方通过include引用模板。模板中统一加入上报逻辑,确保所有调用都能被追踪。
  3. 添加自定义标识:要求调用方在CI变量中设置唯一的客户ID,上报时一并提交,方便区分不同使用者(适合精细化统计场景)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:30:26