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

任何帮助将不胜感激。

谢谢你。

4

2 回答 2

7

根据Terraform 文档,您必须创建以TF_VAR_xTerraform 命名的环境变量以自动获取它们。因此,在您的构建定义中,创建一个名为TF_VAR_ARM_SUBSCRIPTION_ID. 非秘密构建变量会自动转换为环境变量。

-var 'ARM_SUBSCRIPTIONID=$(ARM_SUBSCRIPTION_ID)'另一个选项是通过在命令行上指定将变量值传递给 Terraform 脚本

于 2019-01-18T04:17:59.380 回答
0

我所做的是我有一个 terraform.tfvars 文件,其中的值引用了 Azure DevOps 变量,例如

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

然后是一个Replace Tokens任务来替换这个文件中的 AzDo 变量,它由 TF 自动拾取(我将语法从 __ 更改为 ${},我更喜欢这样)

于 2021-03-26T07:16:04.257 回答