我最近使用Terraform任务完成了我的第一个Azure devops管道。我阅读了关于terraform工作空间的教程,并尝试将其应用于发布管道。
- 在第一阶段:我有一个TF任务,它创建了一个工作区"dev",我确认它运行良好
- 在第二阶段:同一个任务和我创建了一个工作区"测试">
但是,当我运行第二个版本时,TF返回一个错误,指出工作区"dev"(或"test"(已经存在,这是真实和正常的。因此,在Azure Devops中,我勾选了"错误时继续"框。
正如你可能猜到的,我的所有版本都有效,但由于现有的工作区,我收到了警告。当我运行命令时,你有忽略错误的忍者技巧吗
terraform workspace new dev
也许它存在一个隐藏输出错误的参数。
我通常不希望在常规Terraform管道中看到工作区的创建。
相反,工作区要么在最初设置配置时建立一次(在正在进行的例行更新中保持不变(,要么工作区用于临时开发工作,因此可以通过直接运行terraform workspace new
命令在开发人员的工作环境中手动创建。
在自动化中运行Terraform时,管道通常会从运行terraform init
开始,然后运行其他命令,如terraform plan
或terraform apply
。如果需要选择非默认工作区,可以在运行任何命令之前设置环境变量TF_WORKSPACE
,然后Terraform将使用该工作区进行所有操作。如上所述,在设置管道之前,您应该先建立一次工作区,这样管道就会只使用已经存在的工作区,或者如果不存在就会生成错误,提示您执行一次性设置步骤来创建它。
Terraform目前还没有"如果不存在就创建"选项,但有一个GitHub问题打开,供选择或如果不存在则创建
https://github.com/hashicorp/terraform/issues/16191
在同一条线索上,有没有提到一些变通方法
一种解决方法是
terraform workspace select $env_name || terraform workspace new $env_name
因此它将选择现有的工作空间,否则它将创建