自动部署 Google Cloud 资源

将 Cloud Build 构建触发器与 Infrastructure Manager 相关联,可让您直接从 Git 代码库自动执行基础架构部署。在此工作流中,拉取请求会生成 部署预览,而 合并的提交会自动 创建或 更新部署。

准备工作

  1. 确保已启用 Infra Manager。
  2. 确保您拥有创建部署所需的 IAM 权限:
    • roles/config.admin
  3. 确保您拥有具有所需权限的服务帐号。如需了解详情, 请参阅配置服务账号。
  4. 确定具有 Terraform 配置的现有 Git 代码库。 当您设置本页所述的自动化时,Infra Manager 会使用此 Terraform 配置来更新资源。
  5. 建议:为 Git 代码库设置 分支保护。

自动部署 Google Cloud 资源

以下步骤介绍了自动预览和部署存储在 Git 代码库中的 Terraform 配置所需的设置。Terraform 配置的部署可以是现有部署的修订版本。 修订版本可能会删除或替换已预配的 Google Cloud 资源。

设置完成后,Git 代码库中的拉取请求会导致 Infra Manager 创建部署预览。合并拉取请求后,Infra Manager 会自动部署 Terraform 配置。

im_cloudbuild_workspace 模块会创建多个资源,包括:

  • Cloud Build 代码库连接。
  • 在创建拉取请求时调用的 Cloud Build 构建触发器。此触发器会导致 Infra Manager 使用代码库中的 Terraform 配置创建预览部署。
  • 在拉取请求与 Git 代码库合并时调用的 Cloud Build 构建触发器。此触发器会导致 Infra Manager 使用代码库中的 Terraform 配置创建或更新部署。

如需在代码库更新时自动执行 Terraform 配置部署,请执行以下操作:

  1. 在您的 GitHub 账号或您拥有的组织中安装 Cloud Build GitHub 应用 。
  2. 创建个人访问令牌。

    请务必将令牌设置为永不过期,并在 GitHub 中出现提示时选择以下权限:repo 和 read:user。如果您的应用安装在组织中,请务必同时选择 read:org 权限。

    生成个人访问令牌后,请将生成的令牌保存在安全的位置。您将在以下步骤中使用生成的令牌。

  3. 将 im_cloudbuild_workspace 模块复制到 Git 代码库中的 main.tf 文件中:

    module "im-workspace" {
     source = "terraform-google-modules/bootstrap/google//modules/im_cloudbuild_workspace"
     version = "~> 7.0"
    
     project_id = "PROJECT_ID"
     deployment_id = "DEPLOYMENT_ID"
     im_deployment_repo_uri = "GIT_REPO"
     im_deployment_ref = "REF"
    
     github_app_installation_id = "GIT_APP_ID"
     github_personal_access_token = "TOKEN"
    }
    

    替换:

    • PROJECT_ID:运行 Infrastructure Manager 的项目的 ID。
    • DEPLOYMENT_ID:您 指定的部署标识符。如需详细了解部署标识符的限制,请参阅 部署名称 。
    • GIT_REPO:Git 代码库的 URI。
    • REF:配置的 Git 引用。此引用是可选的。如果您未指定引用,则使用 Git 代码库的默认配置分支。
    • GIT_APP_ID:用于拉取和推送请求触发器的 Cloud Build GitHub 应用的安装 ID。
    • TOKEN:GitHub 代码库的个人访问令牌。 如果提供,则会在 Secret Manager 中创建 Secret。
  4. 使用 the im_cloudbuild_workspace 模块创建部署(或更新现有部署):

    gcloud infra-manager deployments apply projects/PROJECT_ID/locations/LOCATION/deployments/DEPLOYMENT_ID \ 
       --service-account projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT \
       --git-source-repo=GIT_REPO \
       --git-source-directory=DIRECTORY \
       --git-source-ref=REF
    

    替换:

    • PROJECT_ID:运行 Infrastructure Manager 的项目的 ID。
    • LOCATION:运行 Infra Manager 的位置。如需查看位置列表,请参阅 Infrastructure Manager 位置 。
    • DEPLOYMENT_ID:您 指定的部署标识符。如需详细了解部署标识符的限制,请参阅 部署名称 。
    • SERVICE_ACCOUNT:您用于调用 Infra Manager 的服务帐号的名称。
    • SERVICE_ACCOUNT_PROJECT_ID 是服务 账号的项目 ID。这通常与运行 Infrastructure Manager 的项目相同。
    • GIT_REPO:公共 Git 代码库。
    • DIRECTORY:包含 Terraform 配置的目录。
    • REF:配置的 Git 引用。此引用是可选的。如果您未指定引用,则使用 Git 代码库的默认配置分支。
  5. 如需确认 Git 代码库已与 Infra Manager 正确关联,请在代码库中创建拉取请求。

    如需查看分叉的 Terraform 配置的验证结果, 请在 GitHub 中查看拉取请求。

现在,此自动化已设置完毕,Cloud Build 触发器会导致以下情况:

  • 当向代码库发出拉取请求时,Infra Manager 会使用存储在 Git 代码库中的分叉 Terraform 配置创建预览部署。
  • 当拉取请求合并到代码库中时,Infra Manager 会使用存储在 Git 代码库中的分叉 Terraform 配置更新部署。

后续步骤