如何在Azure DevOps/VSTS中引用Terraform文件中的变量

7
我已经创建了一个简单的流水线。一个带有Azure DevOps 构建流水线的Github仓库。
我在Github私有仓库的ax.tf文件中定义了以下变量:
ARM_CLIENT_ID
ARM_CLIENT_SECRET
ARM_SUBSCRIPTION_ID
ARM_TENANT_ID

构建流水线具有一个简单的命令行作业,如下所示:

sudo apt install wget

wget https://releases.hashicorp.com/terraform/0.11.11/terraform_0.11.11_linux_amd64.zip

sudo apt-get install unzip

unzip terraform_0.11.11_linux_amd64.zip

terraform init

terraform plan -var-file=terraform.tfvars -out=ax.plan

terraform apply ax.plan

terraform destroy -auto-approve

我希望了解如何在Terraform的ax.tf文件中引用这些构建变量?

根据Azure DevOps文档,我已经尝试了以下方式,但并没有起作用:

variable "ARM_SUBSCRIPTION_ID" {
    default="$(Build.ARM_SUBSCRIPTION_ID)"
}

很遗憾,它没有按预期工作,并停止在下面的执行级别:
[0m[1m[32mTerraform has been successfully initialized![0m[32m[0m
[0m[32m
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.[0m
[0m[1mvar.ARM_CLIENT_ID[0m

任何帮助都将不胜感激。
谢谢。
2个回答

7
根据Terraform文档,您需要创建名为TF_VAR_x的环境变量,以便Terraform自动获取它们。因此,在构建定义中,创建一个名为TF_VAR_ARM_SUBSCRIPTION_ID的变量。非机密构建变量会自动转换为环境变量。
另一种选择是通过在命令行上指定-var 'ARM_SUBSCRIPTIONID=$(ARM_SUBSCRIPTION_ID)'来将变量值传递给Terraform脚本。

我有一个更好的方法。在“变量组”中定义这四个变量,就像全局变量一样。然后,您必须将管道链接到这个新创建的“变量组”。完成后,您可以使用$(customer)引用其中的变量,“customer”是“变量组”中定义的变量。我现在卡在了一个新错误上:provider.azurerm: 无法列出提供程序注册状态,可能是由于凭据无效或服务主体没有权限使用资源管理器API,Azure错误:azure.BearerAuthorizer#WithAuthorization - learner
是的,我尝试了您建议的TF_变量命名方法,并且它完美地运行了。再次非常感谢 :) - learner

2

我的工作是创建一个包含对Azure DevOps变量引用的值的terraform.tfvars文件,类似于以下内容:

tenant              = "${tenantId}"
environment         = "${environmentName}"
location            = "${resourceLocation}"
resource_group_name = "${resourceGroup}"

然后需要使用替换标记任务来替换此文件中的AzDo变量,这个任务会被TF自动识别并执行(我改变了语法从__变成了${},我更喜欢这种方式)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接