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

如何在GitLab同一流水线后续单独运行的任务中使用之前生成的artifacts

解决方案

报错的核心原因是needs关键字仅支持引用同一条流水线内的前置任务,当你单独触发仅运行job3的流水线时,当前流水线不存在job1、job2,因此校验不通过。

该需求可以实现,通过GitLab内置CI API即可自动拉取历史流水线的artifacts,无需手动下载,配置步骤如下:

前置准备

项目无需额外配置权限,GitLab内置的CI_JOB_TOKEN默认拥有同项目的artifacts拉取权限。你只需要提前记录之前成功执行job1、job2的流水线ID(也可以配置自动拉取当前分支最新的成功流水线产物,无需手动填ID)。

配置修改

仅需调整job3的定义,删除原有的needs配置,在script中添加artifacts拉取逻辑即可,完整的job3配置如下:

job3:
  stage: stage3
  rules:
    - if: $RUN == "run3"
      when: always
  script:
    # 提前创建存放artifact的目录
    - mkdir -p data
    # 拉取指定流水线job1的artifacts
    - curl --header "JOB-TOKEN: $CI_JOB_TOKEN" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/jobs/artifacts/${SOURCE_PIPELINE_ID}/download?job=job1" --output job1_artifacts.zip
    - unzip -o job1_artifacts.zip
    # 拉取指定流水线job2的artifacts
    - curl --header "JOB-TOKEN: $CI_JOB_TOKEN" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/jobs/artifacts/${SOURCE_PIPELINE_ID}/download?job=job2" --output job2_artifacts.zip
    - unzip -o job2_artifacts.zip
    # 原有执行逻辑
    - echo "Running stage 3"
    - cat data/dates.txt
    - cat data/uptime.txt

使用方法

  1. 手动触发流水线时,在变量填写区域新增变量SOURCE_PIPELINE_ID,值为之前成功运行job1、job2的流水线ID
  2. 设置RUN=run3触发流水线即可,job3会自动拉取对应artifacts执行后续逻辑

可选优化:自动拉取当前分支最新成功流水线的artifacts

如果不想每次手动填写SOURCE_PIPELINE_ID,可以将下载API中的${SOURCE_PIPELINE_ID}替换为${CI_COMMIT_REF_NAME},即可自动拉取当前分支最新成功流水线对应job的artifacts,修改后的下载命令如下:

# 拉取当前分支最新成功流水线的job1产物
curl --header "JOB-TOKEN: $CI_JOB_TOKEN" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/jobs/artifacts/${CI_COMMIT_REF_NAME}/download?job=job1" --output job1_artifacts.zip

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:24:03