自動部署 Google Cloud 資源

本頁說明設定 Cloud Build 觸發條件的程序,以便使用現有的存放區和基礎架構管理工具,自動部署 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:您指定的部署 ID。如要進一步瞭解部署 ID 的限制條件,請參閱「部署名稱」。
    • GIT_REPO:Git 存放區的 URI。
    • REF:設定的 Git 參照。參考資料為選用項目。如果您未指定參照,系統會使用 Git 存放區的預設設定分支。
    • GIT_APP_ID:用於提取和推送要求觸發條件的 Cloud Build GitHub 應用程式安裝 ID。
    • TOKEN:GitHub 存放區的個人存取權杖。如果提供,則會在 Secret Manager 中建立密鑰。
  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:您指定的部署 ID。如要進一步瞭解部署 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 設定來更新部署作業。

後續步驟