Jenkins pipeline 如何将变量从jenkins文件传递到terraform
当我在variable.tf中使用局部变量运行terraform时,一切都像一个符咒一样工作 我想在terraform variable.tf文件中传递Jenkins参数,这样它将是动态的 我怎样才能做到呢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}"
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个选项:
.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选项传递了它。如果您向我显示代码,我可以帮助您找出原因问题是。