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

GitLab CI中Terraform Plan与Apply分阶段执行失败排查

GitLab CI Terraform plan文件在apply阶段找不到?看这几个解决点

1. 先盯紧制品路径配置

plan阶段生成的tfplan如果在terraform/目录下,artifacts的paths必须写全路径,不能只写tfplan。比如plan阶段的配置里,artifacts要这么写:

artifacts:
  paths:
    - terraform/tfplan  # 必须指定到具体目录下的文件
  expire_in: 1 week  # 别设太短,不然apply还没跑文件就没了

要是路径写错,apply阶段根本拉不到这个文件。

2. apply阶段要找对工作目录

plan阶段是在terraform/目录下生成的tfplan,apply阶段要么切换到这个目录执行命令,要么直接写完整路径。比如:

apply:
  script:
    - cd terraform
    - terraform apply tfplan
  dependencies:
    - plan  # 明确告诉CI要拉取plan阶段的制品,稳一点

别在根目录直接跑terraform apply tfplan,那肯定找不到。

3. 先确认plan阶段真的生成了文件

在plan阶段的脚本最后加个ls -la,看看tfplan到底有没有生成。比如:

plan:
  script:
    - cd terraform
    - terraform init
    - terraform plan -out=tfplan
    - ls -la  # 当场验证文件存在与否

要是这里都没生成,那后面肯定找不到,得先排查terraform plan命令有没有报错。

4. 别让Runner拖后腿

如果plan和apply用了不同标签的Runner,有些Runner可能没共享制品存储,导致文件传不过去。尽量让两个阶段用相同的tags,或者确认你的GitLab Runner是用的共享制品存储(默认是开的)。

5. 检查.gitignore有没有搞破坏

看看项目里的.gitignore文件,是不是把tfplan加进去了。GitLab CI上传制品的时候会跳过被.gitignore忽略的文件,要是有这条,赶紧删掉。

给你个能用的完整配置示例

stages:
  - validate
  - plan
  - apply

validate:
  stage: validate
  image: 你的自定义Terraform镜像地址
  script:
    - cd terraform
    - terraform init
    - terraform validate

plan:
  stage: plan
  image: 你的自定义Terraform镜像地址
  script:
    - cd terraform
    - terraform init
    - terraform plan -out=tfplan
    - ls -la  # 验证文件生成
  artifacts:
    paths:
      - terraform/tfplan
    expire_in: 1 week

apply:
  stage: apply
  image: 你的自定义Terraform镜像地址
  script:
    - cd terraform
    - terraform apply tfplan
  dependencies:
    - plan
  when: manual  # 手动触发更安全,避免误操作
  only:
    - main  # 只允许主分支执行apply,按需改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:00:07