jenkins 错误:无法读取文件- Terraform backend.tf文件

fjnneemd  于 2023-01-01  发布在  Jenkins
关注(0)|答案(1)|浏览(215)

我已经创建了Jenkins Pipeline来使用terraform自动化基础设施部署,其中包括3个阶段terraform初始化、terraform计划和terraform应用。
在执行管道时,我遇到了如下错误:-

我无法理解错误是什么以及为什么会发生。
如果我在本地设备中运行相同的配置和terraform代码,它会工作得很好,很成功。
但是,如果我运行同样的使用Jenkins管道,它给我一个错误。
下面是我为terraform创建的文件夹结构:-

我正在尝试使用以下命令执行terraform配置:-

terraform init -backend-config=../environment/$params.location/$params.env/backend.tf  -backend-config="subscription_id="$ARM_SUBSCRIPTION_ID""

terraform plan -var-file=../environment/$params.location/$params.env/terraform.tfvars

terraform apply -var-file=../environment/$params.location/$params.env/terraform.tfvars

有没有人能帮我弄清楚我哪里出错了。我试过在全球范围内搜索,但没有用。
欢迎提出任何建议。
请查找Jenkins管道代码(容器、体积和资源已从代码中隐藏,并且运行良好。Terraform初始化阶段失败):-

pipeline {
agent {
    kubernetes {
     yaml '''
        apiVersion: v1
        kind: Pod
        metadata:
          labels:
            iac: labelbuild
        spec:
            containers:
                           

              resources:
                
              volumeMounts:
                 
            volumes: 
                
         '''
    }
}
environment {
        ARM = credentials("${params.Service_principal}")
}
parameters {
        choice(choices: '',            description: 'Select Location to Build', name: 'location')
        choice(choices: '', description: 'Select Env to Build',      name: 'env')
        string(name: 'Service_principal', defaultValue: '',                        description: 'Enter the Service principal ID for ex : ngpr-deploy-dev-sp'  )
        string(name: 'repo_url',    defaultValue: '',    description: 'Enter the Infra repo http URL'  )
        string(name: 'Branch_Name', defaultValue: '',    description: 'Enter the Infra repo URL Branch to build'  )
}

/* Terraform stages will be running to excute the scripts from the repository and deploy it in the Azure portal */

stages {

    stage ('terraform init') {
        steps{
            container('terraform') {
                sh """
                    
                    echo "Service_Principal Name is ${params.Service_principal}"
                    terraform version
                    curl ifconfig.me
                    ls -lat
                    pwd
                    cd terraform/source
                    rm -rf .terraform/
                    rm -f .terraform.lock.hcl
                    terraform init -backend-config=../environment/$params.location/$params.env/backend.tf  -backend-config="subscription_id="${ARM_SUBSCRIPTION_ID}""
                    
                  """
            }
        }
    }
    
    stage ('terraform validate') {
        steps {
            container('terraform') {
                sh """
                    cd terraform/source
                    terraform validate
                    """
            }
        }
    }

    stage ('terraform plan') {
        steps {
            container('terraform') {
                sh """
                     cd terraform/source
                     terraform plan -var-file=../environment/$params.location/$params.env/terraform.tfvars
                    """
            }
        }
    }

    stage ('terraform apply') {
        input {
            message "User input required"
            ok "Yes"
            parameters {booleanParam(defaultValue: false, name: 'Choose "yes" if you want to apply this plan')}
        }
        steps{
                container('terraform') {
                  sh """
                    cd terraform/source  
                    terraform apply -var-file=../environment/$params.location/$params.env/terraform.tfvars
                   """
                }
            }
    }
}

}

ubbxdtey

ubbxdtey1#

这个错误似乎是由于Jenkins脚本中的一个打字错误。屏幕截图显示“environments”(复数); Jenkins文件显示“environment”(末尾没有“s”)。可以通过将Jenkins文件中对“environment”的相关引用替换为“environments”来修复此问题。

相关问题