从在线 VSTS 进程或组变量填充本地 VSTS Linux 代理上的 terraform.tfvars 文件中的变量

Posted

技术标签:

【中文标题】从在线 VSTS 进程或组变量填充本地 VSTS Linux 代理上的 terraform.tfvars 文件中的变量【英文标题】:Populate variables in terraform.tfvars file on local VSTS Linux Agent from online VSTS Process or Group Variable 【发布时间】:2018-08-08 03:06:58 【问题描述】:

我确实使用 Azure、Terraform、Ansible、GIT 和 Visual Studio Team Service (VSTS) 建立了基础架构即代码 (IAC) 构建管道。我还在我的本地机器上设置了一个与 VSTS 在线同步的 VSTS 代理。该设置目前可以无缝运行,只要我在本地 Ubuntu 机器上更改 Terraform 基础设施规范,并将更改提交到我的 GIT 存储库,它就会自动更新 Azure 中的 VM 定义。

问题

如上所示,我有一些应用程序变量,例如 Azure 订阅 ID、用户名、密码等,我不想提交到我的公共存储库。因此,我将它们定义为 VSTS 中的组变量,我需要将它们下载/同步到 terraform.tfvars 文件中的本地 Linux 代理。

请问我怎样才能做到这一点。

【问题讨论】:

我不太了解 Azure,但它没有类似 AWS 的 IAM 角色的概念,这些角色可以由 VSTS 等服务承担并允许使用这些角色,而不必提供自己的凭据? 【参考方案1】:

我们使用多种技术将敏感数据移出脚本。一些例子:

环境变量中的 Terraform 后端凭据(有关列表,请参阅 https://www.terraform.io/docs/providers/azurerm/index.html#testing) 使用 key_vault_secret 从 Key Vault 中提取的密码、密钥和证书 terraform.tfvars 文件中的变量来自不同的锁定存储库;这对于接受多个输入工件的发布管道来说是微不足道的。您还可以使用 Powershell 即时生成此文件

只要确保管道在自己之后清除所有这些秘密:VSTS 不会为您执行此操作。

【讨论】:

以上是关于从在线 VSTS 进程或组变量填充本地 VSTS Linux 代理上的 terraform.tfvars 文件中的变量的主要内容,如果未能解决你的问题,请参考以下文章

VSTS Online - 将文件从AGENT MACHINE复制到VSTS

如何使用服务挂钩从VSTS触发内部部署jenkins作业

VSTS中JSON的XDT转换?

微软在线 VSTS/TFS 使用简介,如何删除项目,帐号,获取git地址等

VSTS - 通过个人访问令牌从GitHub获取源代码

VSTS:将构建/发布变量传递到 Powershell 脚本任务