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

Gitlab CI/CD跨分支传递Artifact 解决源分支删除后无法拉取制品问题

GitLab 原生跨分支制品拉取解决方案

以下方案均不需要额外搭建外部存储,也无需按分支名规划存储路径:

方案1:按提交哈希拉取制品(兼容性最好)

GitLab 制品拉取API支持使用提交SHA替代分支名作为定位参数,源分支删除后对应提交只要仍存在于仓库(合并入主分支后提交必然保留),制品就可以正常拉取。
将原有拉取命令中的分支名替换为预设变量 $CI_MERGE_REQUEST_SOURCE_BRANCH_SHA 即可:

curl -k --location --header "PRIVATE-TOKEN:super_secret_token" "https://gitlab.my_domain.tld/api/v4/projects/2/jobs/artifacts/$CI_MERGE_REQUEST_SOURCE_BRANCH_SHA/download?job=terraform_plan" -o artifact.zip

建议将认证令牌替换为内置的 $CI_JOB_TOKEN,无需手动配置权限,安全性更高。

方案2:使用needs关键字直接关联MR流水线制品(GitLab 13.10+)

GitLab 原生支持跨流水线引用制品,不需要手动调用API拉取。主分支的apply job可以直接关联对应MR流水线的plan job,配置示例如下:

apply:
  stage: apply
  only:
    - main
  needs:
    - pipeline: $CI_MERGE_REQUEST_PIPELINE_ID
      job: terraform_plan
  script:
    - terraform apply tfplan

GitLab 会自动将对应plan job的制品下载到当前job的工作目录,无需额外操作。

方案3:将制品绑定到Merge Request对象(GitLab 14.1+)

在plan job的配置中添加expose_as字段,将制品直接绑定到MR对象:

terraform_plan:
  stage: plan
  only:
    - merge_requests
  artifacts:
    paths:
      - "*/tfplan"
      - executed_dirs.txt
    expose_as: "terraform-plan-artifacts"

后续拉取时可以通过MR IID定位制品,不受源分支删除影响,拉取API示例:

curl -k --location --header "PRIVATE-TOKEN:super_secret_token" "https://gitlab.my_domain.tld/api/v4/projects/2/merge_requests/$CI_MERGE_REQUEST_IID/artifacts/download?job=terraform_plan" -o artifact.zip

注意事项

  • 需确保plan阶段制品的过期时间长于MR从创建到合并的平均周期,避免制品提前被清理
  • 所有用到的预设变量仅在MR合并触发的主分支流水线中自动注入,手动触发的主分支流水线需要手动传入对应参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 23:57:02