Jenkins执行terraform apply --auto-approve报无配置文件错误如何解决?
问题根因
该报错的核心原因是Terraform执行时的工作目录下不存在.tf配置文件。你所有的Terraform配置都存放在Git仓库的terraform-aws-ec2-with-vpc子目录下,但Jenkins Pipeline默认在工作区根目录执行所有shell命令,导致apply阶段找不到配置文件。
空目录执行terraform init本身不会报错,只会初始化一个空的Terraform工作目录,只有到apply阶段才会校验配置文件是否存在,因此前两个阶段看起来运行正常。
排查步骤
- 在Pipeline的Terraform相关步骤前添加路径校验命令,确认当前执行路径:在每个stage的sh步骤前加
sh 'pwd && ls *.tf',验证是否能匹配到tf配置文件 - 确认git checkout后仓库的目录结构,匹配tf文件所在的相对路径,你本地执行时默认进入了
terraform-aws-ec2-with-vpc目录后执行命令,因此本地运行正常
解决方法
修改Jenkins Pipeline,给所有Terraform相关步骤指定正确的工作目录,常用实现方式有两种:
方式1:使用dir指令切换工作目录
修改后的Pipeline如下:
pipeline{ agent any tools { terraform 'terraform' } stages{ stage('Git Checkout'){ steps{ git branch: 'main', credentialsId: 'gitlab id', url: 'https://gitlab.com/ndey1/kafka-infra' // 可选:打印目录结构确认路径 sh 'find . -name "*.tf"' } } stage('Terraform init'){ steps{ // 切换到tf配置所在的子目录 dir('terraform-aws-ec2-with-vpc') { sh 'terraform init' } } } stage('Terraform apply'){ steps{ dir('terraform-aws-ec2-with-vpc') { sh 'terraform apply --auto-approve' } } } } }
方式2:给terraform命令指定配置目录参数
直接在terraform命令后加配置目录路径,不需要切换工作目录:
stage('Terraform init'){ steps{ sh 'terraform init ./terraform-aws-ec2-with-vpc' } } stage('Terraform apply'){ steps{ sh 'terraform apply --auto-approve ./terraform-aws-ec2-with-vpc' } }
内容的提问来源于stack exchange,提问作者Niladri Dey
相关产品推荐
相关产品推荐

