为Terragrunt配置Atlantis遇$PLANFILE问题,求自定义工作流解决方案
问题分析与解决方案
核心问题
你遇到的问题分为两部分:
- 使用Atlantis内置的
$PLANFILE变量时执行plan报错,但改用固定路径/tmp/plan可以运行 - 固定路径会导致多项目计划互相覆盖,无法同时管理多个环境的计划
为什么$PLANFILE会报错?
$PLANFILE是Atlantis自动生成的唯一路径变量,每个项目/PR的计划文件都会有独立路径,不会冲突。报错的大概率原因是你的工作流配置有两处细节问题:
1. TERRAGRUNT_TFPATH的环境变量设置错误
官方配置里的command使用了嵌套引号,导致shell解析异常。正确的写法应该去掉echo输出里的额外引号:
- env: name: TERRAGRUNT_TFPATH command: 'echo terraform${ATLANTIS_TERRAFORM_VERSION}'
(原配置里的echo "terraform${ATLANTIS_TERRAFORM_VERSION}"会把引号也作为环境变量值的一部分,导致Terragrunt无法找到正确的Terraform二进制文件)
2. 缺少autoplan与when_modified配置
第一个配置里没有定义autoplan规则,Atlantis无法识别哪些文件变更需要触发计划,也无法正确关联项目目录与计划文件。这会导致$PLANFILE的生成逻辑异常,进而报错。
正确的配置方案
结合你的目录结构,下面是修正后的atlantis.yaml配置,既解决$PLANFILE报错问题,又避免计划文件覆盖:
version: 3 automerge: false parallel_apply: false parallel_plan: false projects: - dir: test-atlantis/prod/bucket autoplan: enabled: true when_modified: - '*.hcl' - '*.tf*' - ../terragrunt.hcl - ../common_vars.yaml - ../../../gcp-modules/test-atlantis/bucket/*.tf* workflow: terragrunt - dir: test-atlantis/stage/bucket autoplan: enabled: true when_modified: - '*.hcl' - '*.tf*' - ../terragrunt.hcl - ../common_vars.yaml - ../../../gcp-modules/test-atlantis/bucket/*.tf* workflow: terragrunt workflows: terragrunt: plan: steps: # 修正TERRAGRUNT_TFPATH的设置 - env: name: TERRAGRUNT_TFPATH command: 'echo terraform${ATLANTIS_TERRAFORM_VERSION}' # 正确使用$PLANFILE,Atlantis会自动生成唯一路径 - run: terragrunt plan -no-color -out $PLANFILE apply: steps: - env: name: TERRAGRUNT_TFPATH command: 'echo terraform${ATLANTIS_TERRAFORM_VERSION}' - run: terragrunt apply $PLANFILE
额外验证步骤
如果还是报错,可以按以下步骤排查:
- 检查Atlantis运行用户是否有
$PLANFILE路径的读写权限(默认路径在Atlantis的工作目录下,一般权限没问题) - 查看Atlantis的日志,确认
TERRAGRUNT_TFPATH的实际值是否正确(比如是否输出为terraform1.5.0这类合法的Terraform二进制名称) - 确保Terragrunt版本与Terraform版本兼容
内容的提问来源于stack exchange,提问作者carlitos081
相关产品推荐
相关产品推荐

