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

如何忽略GitLab CI流水线状态,下载指定提交的任务工件?

解决方案

方法一:直接使用提交SHA下载工件

GitLab API支持通过提交SHA(CI_COMMIT_SHA,GitLab预定义变量)来下载对应提交中指定任务的工件,这个方式不受流水线整体状态限制,只要目标任务(assemble:release)已完成生成工件即可。

在deploy:dev任务的cURL命令中替换为以下格式:

curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
     "https://server-name.tld/api/v4/projects/${CI_PROJECT_ID}/jobs/artifacts/${CI_COMMIT_SHA}/download?job=assemble:release"

注意事项:

  • CI_JOB_TOKEN是GitLab自动生成的临时令牌,默认拥有当前项目的工件读取权限(GitLab 12.0及以上版本),无需额外配置。
  • 由于你的流水线阶段是顺序执行的,deploy阶段在assemble之后触发,因此assemble:release任务必然已完成并生成工件,无需额外等待逻辑。

方法二:传递assemble:release的Job ID(更精准)

如果担心同一提交可能有多个流水线运行(比如重复触发),可以在assemble:release任务中把自身的Job ID保存为工件,后续deploy任务读取这个ID后再下载对应工件,完全避免混淆。

  1. 修改assemble:release任务配置,将Job ID写入文件并作为工件上传:
assemble:release:
  stage: assemble
  script:
    # 你的构建命令
    echo "${CI_JOB_ID}" > assemble_job_id.txt
  artifacts:
    paths:
      - assemble_job_id.txt
      # 保留你原本的工件路径
  1. 在deploy:dev任务中,先下载包含Job ID的临时工件,再用该ID下载完整工件:
# 下载包含Job ID的小型工件包
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
     "https://server-name.tld/api/v4/projects/${CI_PROJECT_ID}/jobs/artifacts/${CI_COMMIT_SHA}/download?job=assemble:release" -o temp_artifacts.zip

# 解压出Job ID文件
unzip temp_artifacts.zip assemble_job_id.txt
ASSEMBLE_JOB_ID=$(cat assemble_job_id.txt)

# 用Job ID下载目标工件
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
     "https://server-name.tld/api/v4/projects/${CI_PROJECT_ID}/jobs/${ASSEMBLE_JOB_ID}/artifacts/download" -o final_artifacts.zip

补充:跨流水线场景的等待逻辑(可选)

如果你的deploy:dev触发的外部流水线需要独立下载当前提交的工件(而非同一流水线内执行),可以添加循环查询逻辑,确保assemble:release任务成功完成后再下载:

# 安装jq用于解析API返回的JSON(基于Debian/Ubuntu镜像)
apt-get update && apt-get install -y jq

# 循环查询直到任务成功
until curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
           "https://server-name.tld/api/v4/projects/${CI_PROJECT_ID}/jobs?commit_sha=${CI_COMMIT_SHA}&name=assemble:release&status=success" | jq '. | length > 0'; do
  echo "等待assemble:release任务完成..."
  sleep 30
done

# 下载工件
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
     "https://server-name.tld/api/v4/projects/${CI_PROJECT_ID}/jobs/artifacts/${CI_COMMIT_SHA}/download?job=assemble:release" -o artifacts.zip

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:17:07