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

GitLab同组项目:可引用流水线yml却无法通过CI_JOB_TOKEN克隆仓库(403)

GitLab CI_JOB_TOKEN克隆共享项目报403但include:project正常的原因

问题描述

我们使用GitLab Community Edition(社区版),同一项目组下包含多个部署方式一致的项目。为实现流水线定义共享,我们将通用流水线配置文件放置在同组内的另一个项目中,并通过include:project语法从各项目的.gitlab-ci.yml中引用,此环节运行正常。

目前流水线需要执行部署阶段的PowerShell脚本,这些脚本与流水线配置文件存放在同一项目内。我们尝试使用git clone命令结合CI_JOB_TOKEN变量克隆该项目仓库,却收到403错误提示:

Cloning into 'my-deployment'...
remote: You are not allowed to download code from this project.
fatal: unable to access 'https://myserver/mygroup/my-deployment.git/': The requested URL returned error: 403

为何能引用该项目的流水线yml文件,却无法克隆仓库获取其中的脚本文件?

原因分析

  • 权限生效阶段不同:include:project是GitLab在解析流水线配置时执行的操作,此时使用的是触发流水线的项目对共享配置项目的项目级读取权限(同组内项目默认具备这类权限,所以能正常引用yml文件)。而git clone是在流水线作业运行时执行的,依赖CI_JOB_TOKEN的权限,两者的权限校验机制完全分离。
  • CI_JOB_TOKEN默认权限限制:GitLab社区版中,CI_JOB_TOKEN默认仅能访问当前流水线所属的项目,即便同组内的其他项目,也需要手动配置授权才能让令牌跨项目读取仓库内容。

解决方案

  • 配置共享项目的令牌访问权限:进入存放通用配置和脚本的项目,依次打开设置→CI/CD→令牌访问,在"允许从这些项目访问"列表中添加需要克隆该仓库的项目,授予其读取仓库的权限。
  • 使用正确的克隆URL格式:确保git clone命令正确携带CI_JOB_TOKEN,格式为:
    git clone https://gitlab-ci-token:$CI_JOB_TOKEN@myserver/mygroup/my-deployment.git
    
  • 组级权限配置(适用于多项目场景):如果组内有大量项目需要共享该仓库,可在组的设置→CI/CD→令牌访问中,开启"允许组内项目的CI_JOB_TOKEN互相访问",一次性授权组内所有项目的作业令牌跨项目读取仓库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 02:34:52