如何忽略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后再下载对应工件,完全避免混淆。
- 修改
assemble:release任务配置,将Job ID写入文件并作为工件上传:
assemble:release: stage: assemble script: # 你的构建命令 echo "${CI_JOB_ID}" > assemble_job_id.txt artifacts: paths: - assemble_job_id.txt # 保留你原本的工件路径
- 在
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
相关产品推荐
相关产品推荐

