自动部署 Google Cloud 资源

本页介绍了设置 Cloud Build 触发器的过程,以便使用现有代码库和 Infrastructure Manager 自动部署 Google Cloud 资源。

Infra 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 中收到提示时选择以下权限:reporead: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. 使用 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 配置更新部署。

后续步骤