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

Terraform archive_file本地正常,GitLab CI/CD报错:文件不存在

问题解决:GitLab CI/CD中Terraform archive_file找不到output目录

问题原因

本地运行Terraform时,工作目录有足够权限且环境会自动处理目录创建,但GitLab CI的runner执行环境是全新无状态的,不会自动创建不存在的父目录,导致archive_file无法生成ZIP文件到指定路径。

解决方案

方案1:在CI脚本中提前创建目录(推荐)

修改.gitlab-ci.yml,在Terraform执行步骤前添加目录创建命令,确保目标路径存在:

terraform-deploy:
  stage: deploy
  script:
    - mkdir -p ./output  # -p参数确保递归创建所有不存在的父目录
    - terraform init
    - terraform apply -auto-approve

方案2:在Terraform配置中内置目录创建逻辑

如果希望通过Terraform自身处理目录创建,可以添加null_resource配合local-exec provisioner,并设置依赖关系:

resource "null_resource" "create_output_dir" {
  provisioner "local-exec" {
    command = "mkdir -p ./output"
  }

  # 确保每次执行都触发目录创建
  triggers = {
    always_run = timestamp()
  }
}

data "archive_file" "source" {
  type        = "zip"
  source_dir  = "./src"
  output_path = "./output/function.zip"

  # 依赖目录创建完成后再生成归档文件
  depends_on = [null_resource.create_output_dir]
}

关键说明

  • mkdir -p是核心参数,它能避免因路径层级缺失导致的报错,即使output的上级目录不存在也能递归创建。
  • GitLab CI的runner环境每次都是全新初始化的,所有临时文件和目录在流水线结束后会被清理,因此每次执行都需要确保目标目录存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:42:22