Github Actions中Terragrunt计划文件路径异常问题咨询
1. 工作目录上下文不匹配
Gruntwork的Terragrunt Action默认会切换到你指定的Terragrunt配置文件所在目录(比如通过working-directory参数),这时候$(pwd)指向的是Action当前工作的子目录,而github.workspace是仓库根目录。如果Action的执行上下文没有对仓库根目录的写入权限,或者Terragrunt在当前子目录下无法访问根目录路径,就会触发写入失败。
而你用$(pwd)terragrunt.tfplan时,实际上是把文件名直接拼接到当前工作目录路径后,误打误撞形成了当前目录(或上级目录)下的合法可写路径。比如当前$(pwd)是/github/workspace/app,拼接后路径是/github/workspace/appterragrunt.tfplan,这个文件实际创建在/github/workspace/目录下——而该目录恰好有写入权限,所以能成功生成。
2. 绝对路径的权限或映射问题
当你使用$(pwd)/terragrunt.tfplan或github.workspace变量时,生成的是标准绝对路径(比如/github/workspace/app/terragrunt.tfplan),可能遇到两种问题:
- 该子目录的权限被限制:比如Terragrunt Action的执行用户没有当前子目录的写入权限;
- 容器路径映射差异:如果Terragrunt Action在Docker容器中运行,
github.workspace的主机路径和容器内映射路径不一致,导致Terragrunt无法识别该路径。
3. Action的命令解析限制
部分Gruntwork Terragrunt Action会对命令中的路径做自动前缀处理,当你使用带斜杠的绝对路径时,Action无法正确转换路径上下文,导致Terragrunt尝试写入无权限或不存在的路径。而无斜杠的拼接路径被Action识别为当前工作目录下的文件名,从而绕过了路径转换问题。
快速验证方案
- 先在流水线中添加路径打印步骤,确认两个变量的实际值:
- name: Print path details run: | echo "Current working directory: $(pwd)" echo "GitHub workspace path: ${{ github.workspace }}" - 改用相对路径
./terragrunt.tfplan测试,看是否能正常生成计划文件; - 检查Terragrunt Action的
working-directory参数,确认指定目录的读写权限。
内容的提问来源于stack exchange,提问作者Mornor

