我正在使用 GitHub Actions 和 Terraform 构建 CI/CD 管道。我有一个如下所示的 main.tf 文件,我从多个环境的 GitHub 操作中调用该文件。我正在使用https://github.com/hashicorp/setup-terraform在 GitHub 操作中与 Terraform 进行交互。我有 MyService 组件,我正在部署到 DEV、UAT 和 PROD 环境。我想为所有环境重用 main.tf 并动态设置工作区名称,如下所示:MyService-DEV、MyService-UAT、MyService-PROD。terraform/cloud 块中不允许使用变量。我正在使用 HashiCorp 云来存储状态。
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 2.0"
}
}
cloud {
organization = "tf-organization"
workspaces {
name = "MyService-${env.envname}" #<==not allowed to use variables
}
}
}
更新
我终于设法通过有用的评论来启动并运行它。以下是我的发现:
- TF_WORKSPACE 需要预先定义,例如:service-dev
- 在自动化运行时,我没有让标签按照我想要的方式工作。如果我将 cloud.workspaces.tags 中的标签定义为“服务”,则无法动态设置像“开发”这样的第二个标签。在 init ['service', 'dev'] 期间需要这两个标签,以便 TF 自动选择工作区 service-dev。
- 我最终使用 tfe 提供程序来自动设置工作区(带标签)。最后我仍然需要设置 TF_WORKSPACE=service-dev