GitHub Actions执行terraform init报No such file or directory问题咨询
故障根因及解决方法
你遇到的Error: No such file or directory报错和GitHub Actions(GHA)近期的两个变更直接相关,和Helm更新无关联:
- 第一是Ubuntu runner的变量解析逻辑调整:当前
ubuntu-latest对应镜像已经升级到22.04版本,对未定义或为空的工作目录变量的 fallback 规则发生变化:旧版本runner如果working-directory取值为空,会自动回退到$GITHUB_WORKSPACE(也就是仓库根目录),新版本如果变量为空会直接将空字符串作为工作目录路径,触发路径不存在报错。 - 第二是你使用的旧版本Action不兼容新runner规则:
actions/checkout@v2和hashicorp/setup-terraform@v1.2.1都是停止维护多年的版本,不会适配新runner的变量解析逻辑。
你配置的流水线的核心问题点在于:
你在defaults.run.working-directory引用了${{ env.TERRAFORM_WORKING_DIR }}变量,如果你新建的流水线没有在Job或全局env中预先定义这个变量的取值,该变量解析结果为空,就会导致所有run步骤(包括pwd、terraform init)都尝试进入不存在的空路径,直接抛出找不到文件或目录的错误。旧流水线正常是因为旧流水线已经预先配置了该环境变量,或者旧runner的fallback规则掩盖了变量未定义的问题。
排查修复步骤
- 首先在
Get directory步骤前新增一行变量打印步骤,确认环境变量取值:- name: Print working dir variable run: echo "TERRAFORM_WORKING_DIR value is ${{ env.TERRAFORM_WORKING_DIR }}" - 确认变量未定义的话,在Job层面的env块添加
TERRAFORM_WORKING_DIR的正确取值,比如你存放terraform配置的目录是仓库根目录的terraform文件夹,就配置为TERRAFORM_WORKING_DIR: ./terraform - 升级依赖的Action到兼容新版本runner的版本:将
actions/checkout@v2替换为actions/checkout@v4,hashicorp/setup-terraform@v1.2.1替换为hashicorp/setup-terraform@v3
内容的提问来源于stack exchange,提问作者Subsum44
相关产品推荐
相关产品推荐

