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

GitLab CI中使用CI_JOB_TOKEN拉取Release压缩包失败如何解决?

GitLab CI拉取私有项目Release压缩包的解决办法

你遇到的问题是CI里用CI_JOB_TOKEN拉取Release包时被重定向到登录页,但本地用PRIVATE-TOKEN能正常访问——完全可以在CI中拉取该包,问题出在权限配置和curl命令的细节上,具体操作如下:

1. 先确认权限配置

如果目标Release包所在的项目是当前CI项目之外的私有项目,CI_JOB_TOKEN默认没有跨项目访问权限,需要先给目标项目配置权限:

  • 打开目标项目的「设置」→「成员」页面
  • 搜索当前CI所在的项目名称(或项目ID),添加为成员,角色至少选Reporter(这个权限级别足够读取Release资产)
  • 如果是同一个项目的Release包,跳过这一步,默认权限足够

2. 修正curl命令(最直接的解决方式)

之前的curl命令没有跟随重定向,GitLab的部分资源请求会先跳转,加上--location(简写-L)参数让curl自动跟随跳转即可,修正后的命令:

- export RELEASE_PATH="https://gitlab.com/[masked]/libs/${CI_PROJECT_NAME}/-/archive/0.2.11/${CI_PROJECT_NAME}-0.2.11.tar.gz"
- curl --location --header "JOB-TOKEN: $CI_JOB_TOKEN" "${RELEASE_PATH}" -o "${CI_PROJECT_NAME}-${APP_VERSION}.tar.gz"

3. 更可靠的GitLab API方式(适合拉取Release附件)

如果要拉取的是Release页面上传的附件(不是自动生成的源码归档),用GitLab API更稳妥,步骤如下:

  • 先在CI的before_script里安装jq(解析JSON用,根据镜像系统选择命令):
    # Debian/Ubuntu系镜像
    - apt-get update && apt-get install -y jq
    # Alpine系镜像
    - apk add --no-cache jq
    
  • 然后用API拉取并下载附件:
    - export TARGET_PROJECT_ID="目标项目的ID"
    - export RELEASE_TAG="0.2.11"
    - export ASSET_NAME="你要下载的压缩包文件名.tar.gz"
    - curl --silent --header "JOB-TOKEN: $CI_JOB_TOKEN" "https://gitlab.com/api/v4/projects/${TARGET_PROJECT_ID}/releases/${RELEASE_TAG}/assets/links" | jq -r --arg NAME "$ASSET_NAME" '.[] | select(.name == $NAME) | .direct_asset_url' | xargs curl --header "JOB-TOKEN: $CI_JOB_TOKEN" -o "${CI_PROJECT_NAME}-${APP_VERSION}.tar.gz"
    

4. 替代方案:用git archive拉取源码归档

如果只是需要对应tag的源码压缩包,也可以直接用git命令拉取,不需要curl:

- git archive --remote=https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/[masked]/libs/${CI_PROJECT_NAME}.git 0.2.11 --format=tar.gz -o "${CI_PROJECT_NAME}-${APP_VERSION}.tar.gz"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 12:14:58