Jenkins pipeline 如何将变量从jenkins文件传递到terraform

Jenkins pipeline 如何将变量从jenkins文件传递到terraform,jenkins-pipeline,terraform,Jenkins Pipeline,Terraform,当我在variable.tf中使用局部变量运行terraform时,一切都像一个符咒一样工作 我想在terraform variable.tf文件中传递Jenkins参数,这样它将是动态的 我怎样才能做到呢 pipeline { agent any options { skipDefaultCheckout true } environment { TF_VAR_datacenter="${DATA_CENTER}"

当我在variable.tf中使用局部变量运行terraform时,一切都像一个符咒一样工作 我想在terraform variable.tf文件中传递Jenkins参数,这样它将是动态的 我怎样才能做到呢

pipeline {
    agent any
    options {
        skipDefaultCheckout true
    }
    environment {
       TF_VAR_datacenter="${DATA_CENTER}"
       TF_VAR_cluster="${CLUSTER}"
       TF_VAR_esxi="${ESXI}"
       TF_VAR_datastore="${DATASTORE}"
       TF_VAR_network="${NETWORK}"
       TF_VAR_server_hostname="${SERVER_HOSTNAME}"
       TF_VAR_server_mac="${SERVER_MAC}"
    }
    parameters {
        string(name: 'DATA_CENTER', defaultValue: 'xxx', description: 'vcenter data center',)
        string(name: 'CLUSTER', defaultValue: 'xxx', description: 'data center cluster',)
        string(name: 'ESXI', defaultValue: 'xxx', description: 'esxi hostname',)
        string(name: 'DATASTORE', defaultValue: 'xxx', description: 'data center datastore',)
        string(name: 'NETWORK', defaultValue: 'xxx', description: 'data center network',)
        string(name: 'SERVER_HOSTNAME', defaultValue: 'xxx', description: 'server hostname',)
        string(name: 'SERVER_MAC', defaultValue: 'xxx', description: 'server mac',)
        string(name: 'SERVER_IP', defaultValue: 'xxx', description: 'server ip',)
        string(name: 'SERVER_NETMASK', defaultValue: 'xxx', description: 'server netmask',)
        string(name: 'SERVER_GATEWAY', defaultValue: 'xxx', description: 'server gateway',)
        string(name: 'COBBLER_PROFILE', defaultValue: 'xxx', description: 'cobbler profile',)
        choice(name: 'BUILD_DESTROY', description: '', choices: ['build' , 'destroy'])
    }

    stages {
        stage('OS PROVISION') {
            steps {
                dir("/root/terraform"){
                    sh """
                    export TF_VAR_datacenter=${DATA_CENTER}
                    export TF_VAR_cluster=${CLUSTER}
                    export TF_VAR_esxi=${ESXI}
                    export TF_VAR_datastore=${DATASTORE}
                    export TF_VAR_network=${NETWORK}
                    export TF_VAR_server_hostname=${SERVER_HOSTNAME}
                    export TF_VAR_server_mac=${SERVER_MAC}
                    terraform init
                    terraform apply -auto-approve
                    """
                }
            }
        }
    }
    post {
         always {
             echo 'This will always run'
         }

    }
}

你的问题需要更清楚一点,但我要做一些有根据的猜测

在variable.tf中包含局部变量

你是指
局部变量{
,还是指局部变量

在terraform variable.tf文件中传递Jenkins参数

这不是“传递参数”的正确文件。
*.tf
文件用于声明变量。 您可能正在查看
*.tfvars
文件

对于
*.tfvars
文件,您有3个选项:

  • 名为terraform.tfvars的文件
  • 名为
    .auto.tfvars
  • 名为
    .tfvars
    的文件,使用
    -var file
    CLI参数引用该文件
  • *.tfvars
    文件的格式简单如下:
    var1\u name=var1\u value


    您可以(必须)使用常用的HCL标记字符串、列表、地图等

    我更喜欢使用以下格式:

    terraform apply \
      -var 'vpc_id=$(AWS_VPC_ID)' \
      -var 'subnet_id=$(AWS_SUBNET_ID)' \
      -var 'aws_region=$(AWS_REGION)' \
      -var 'ami_id=$(AMI_ID)'\
      -var 'instance_type=$(AWS_EC2_TYPE)' \
      -var 'key_pair=$(KEY_PAIR_NAME)' \
      -var 'tags={ "Owner":"$(OWNER)", "Service":"$(SERVICE)", "Terraform":"true", "Env":"$(ENV)" }'
    

    您的示例应该可以正常工作,但在CLI中使用
    -var
    参数可能会更容易。使用环境块时,您不再需要再次导出它。它是重复的。顺便说一句,我不明白您的问题。您的示例不起作用?我放弃了,并从-var选项传递了它。如果您向我显示代码,我可以帮助您找出原因问题是。