自動部署 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:您指定的部署作業 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 設定分支版本,更新部署作業。

後續步驟