本頁說明如何將 GitHub 存放區連結至 Cloud Build。如要進一步瞭解 Cloud Build 存放區,請參閱「Cloud Build 存放區」。
事前準備
-
Enable the Cloud Build and Secret Manager APIs.
- 準備好 GitHub 存放區中的原始碼。
- 在 GitHub 原始碼存放區中,有
Dockerfile
或 Cloud Build 設定檔。 - 如果您是首次將存放區連結至 Cloud Build,請確認您在存放區中具有管理員層級的權限。如要進一步瞭解 GitHub 存放區權限,請參閱「機構的存放區權限層級」。
如要使用本頁的
gcloud
指令,請安裝 Google Cloud CLI。
連結至 GitHub 主機
主控台
如要將 GitHub 存放區連結至 Cloud Build,請按照下列步驟操作:
在 Google Cloud 控制台中開啟「Repositories」頁面。
畫面會顯示「Repositories」頁面。
在頂端列的專案選取器中,選取 Google Cloud 專案。
選取頁面頂端的「第 2 代」分頁標籤。
按一下「建立主機連線」,將新的主機連結至 Cloud Build。
在左側面板中,選取「GitHub」GitHub做為來源供應工具。
在「Configure Connection」(設定連線) 部分,輸入下列資訊:
區域:選取連線的區域。
名稱:輸入連線名稱。
按一下「連線」。
點選「連線」按鈕後,系統會要求您將 GitHub 帳戶存取權授予 Cloud Build GitHub 應用程式,您隨時可以從主機解除安裝或刪除應用程式,藉此撤銷存取權。
Cloud Build 會要求授權您的 GitHub 使用者帳戶,並將產生的授權權杖儲存在專案的 Secret Manager 中,做為密鑰。授權權杖用於驗證使用者帳戶的存取權,以便安裝 Cloud Build GitHub 應用程式,以及連結存放區。Cloud Build 服務代理人帳戶 (
service-{projectNumber}@gcp-sa-cloudbuild.iam.gserviceaccount.com
) 可用於存取機密資料。如要查看密鑰,請參閱「列出密鑰並查看密鑰詳細資料」一文。授權 Cloud Build GitHub 應用程式後,系統會將您重新導向至 Cloud Build 的「存放區」頁面。
gcloud
如要使用 gcloud
連結 GitHub 主機,請完成下列步驟:
輸入下列指令,啟動與 GitHub 存放區的連線:
gcloud builds connections create github CONNECTION_NAME --region=REGION
其中:
- CONNECTION_NAME 是連線的名稱,會顯示在 Cloud Build 中。
REGION 是觸發條件的區域。
執行
gcloud builds connections
指令後,您會看到一個連結,可用來授權 Cloud Build GitHub 應用程式。登入
github.com
帳戶。點選連結授權 Cloud Build GitHub 應用程式。
授權應用程式後,Cloud Build 會將驗證權杖儲存在 Google Cloud專案的 Secret Manager 中,做為密鑰。您可以在「Secret Manager」頁面查看密鑰。
在您的帳戶或機構中安裝 Cloud Build GitHub 應用程式。
允許使用 GitHub 帳戶進行安裝,並在系統提示時選取存放區權限。
執行下列指令,確認 GitHub 連線安裝程序:
gcloud builds connections describe CONNECTION_NAME --region=REGION
其中:
- CONNECTION_NAME 是 Cloud Build 中 GitHub 主機連線的名稱。
- REGION 是觸發條件的區域。
如果
installationState
欄位已設為COMPLETE
,表示您已成功安裝連線。否則,installationState
欄位會提供連結,讓您採取其他必要步驟。
透過程式輔助方式連線至 GitHub 主機
Terraform
您可以完成下列步驟,使用 Google Terraform 供應器將 GitHub 主機連結至 Cloud Build:
在 GitHub 帳戶或您擁有的機構中安裝 Cloud Build GitHub 應用程式。
-
請務必將權杖設為無效期,並在 GitHub 提示時選取下列權限:
repo
和read:user
。如果您的應用程式已安裝在機構中,請務必一併選取read:org
權限。產生個人存取權憑證後,請將產生的憑證儲存在安全的位置。您將在後續步驟中使用產生的權杖。
在以下範例中,程式碼片段會執行以下操作:
設定 Terraform Google 供應器
建立密鑰來儲存 GitHub 個人存取權杖,以便授予 Cloud Build 服務代理人存取密鑰的權限
建立 GitHub 連線
// Configure the terraform google provider terraform { required_providers { google = {} } } // Create a secret containing the personal access token and grant permissions to the Service Agent resource "google_secret_manager_secret" "github_token_secret" { project = PROJECT_ID secret_id = SECRET_ID replication { auto {} } } resource "google_secret_manager_secret_version" "github_token_secret_version" { secret = google_secret_manager_secret.github_token_secret.id secret_data = GITHUB_PAT } data "google_iam_policy" "serviceagent_secretAccessor" { binding { role = "roles/secretmanager.secretAccessor" members = ["serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"] } } resource "google_secret_manager_secret_iam_policy" "policy" { project = google_secret_manager_secret.github_token_secret.project secret_id = google_secret_manager_secret.github_token_secret.secret_id policy_data = data.google_iam_policy.serviceagent_secretAccessor.policy_data } // Create the GitHub connection resource "google_cloudbuildv2_connection" "my_connection" { project = PROJECT_ID location = REGION name = CONNECTION_NAME github_config { app_installation_id = INSTALLATION_ID authorizer_credential { oauth_token_secret_version = google_secret_manager_secret_version.github_token_secret_version.id } } depends_on = [google_secret_manager_secret_iam_policy.policy] }
其中:
- PROJECT_NUMBER 是您的 Google Cloud 專案編號。
- SECRET_ID 是 Secret Manager 中的權杖或機密金鑰 ID。
- GITHUB_PAT 是您在 GitHub 中的個人存取權杖 ID。
- PROJECT_ID 是您的 Google Cloud 專案 ID。
- REGION 是連線的區域。
- CONNECTION_NAME 是連線的名稱,會顯示在 Cloud Build 中。
- INSTALLATION_ID 是 Cloud Build GitHub 應用程式的安裝 ID。您可以在 Cloud Build GitHub 應用程式的網址中找到安裝 ID。在以下網址
https://github.com/settings/installations/1234567
中,安裝 ID 是數值1234567
。
gcloud
如要使用先前連線取得的現有權杖和安裝 ID 連結 GitHub 主機,請完成下列步驟:
在 GitHub 帳戶或您擁有的機構中安裝 Cloud Build GitHub 應用程式。
-
請務必將權杖設為無效期,並在 GitHub 提示時選取下列權限:
repo
和read:user
。如果您的應用程式已安裝在機構中,請務必一併選取read:org
權限。產生個人存取權憑證後,請將產生的憑證儲存在安全的位置。您將在後續步驟中使用產生的權杖。
執行下列指令,將權杖儲存在 Google Cloud 專案的 Secret Manager 中:
echo -n TOKEN | gcloud secrets create SECRET_NAME --data-file=-
其中:
- TOKEN 是您的個人存取權杖。
- SECRET_NAME 是您要為 Secret Manager 中的 Secret 命名的名稱。
授予 Cloud Build 服務代理對密鑰的存取權,其中 SECRET_NAME 是 Secret Manager 中儲存的密鑰名稱:
PROJECT_ID=$(gcloud config list --format="value(core.project)") PN=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)") CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com" gcloud secrets add-iam-policy-binding SECRET_NAME \ --member="serviceAccount:${CLOUD_BUILD_SERVICE_AGENT}" \ --role="roles/secretmanager.secretAccessor"
建立 GitHub 連線:
gcloud builds connections create github CONNECTION_NAME \ --authorizer-token-secret-version=projects/PROJECT_ID/secrets/SECRET_NAME/versions/1 \ --app-installation-id=INSTALLATION_ID --region=REGION
其中:
- CONNECTION_NAME 是 Cloud Build 中 GitHub 主機連線的名稱。
- PROJECT_ID 是您的 Google Cloud 專案 ID。
- SECRET_NAME 是儲存在 Secret Manager 中的密鑰名稱。
- INSTALLATION_ID 是 GitHub 應用程式的安裝 ID。您可以在 Cloud Build GitHub 應用程式的網址中找到安裝 ID。在以下網址
https://github.com/settings/installations/1234567
中,安裝 ID 是數值1234567
。 - REGION 是連線的區域。
連結 GitHub 存放區
主控台
如要將 GitHub 存放區連結至主機連線,請完成下列步驟:
在 Google Cloud 控制台中開啟「Repositories」頁面。
畫面會顯示「Repositories」頁面。
選取頁面頂端的「第 2 代」分頁標籤。
按一下「Link Repositories」,連結連線中的存放區。
您會看到「Connect Repositories」面板。
在「連結存放區」面板中,輸入以下資訊:
- 連線:從下拉式選單中選取連線。
存放區:選取要連結至連線的存放區。
存放區名稱:輸入存放區名稱。
- 產生:選取這個選項,讓 Cloud Build 自動為所選存放區產生名稱。
手動:選取這個選項,即可手動指定所選存放區的名稱。
如果選取「手動」,您可以在「存放區名稱」專區中修改所選存放區的名稱。
按一下「連結」,將存放區連結至連線。
gcloud
如要將 GitHub 存放區新增至連線,請輸入以下指令:
gcloud builds repositories create REPO_NAME \
--remote-uri=REPO_URI \
--connection=CONNECTION_NAME --region=REGION
其中:
- REPO_NAME 是存放區的名稱。
- REPO_URI 是 GitHub 存放區的連結。例如:
https://github.com/cloud-build/test-repo.git
。 - CONNECTION_NAME 是指在 Cloud Build 中透過「連線至 GitHub 主機」建立的 GitHub Enterprise 主機連線名稱。
- REGION 是連線的區域。
Terraform
如要將 GitHub 存放區新增至連線,請在 Terraform 設定中加入以下程式碼片段:
resource "google_cloudbuildv2_repository" "my_repository" {
project = "PROJECT_ID"
location = "REGION"
name = "REPO_NAME"
parent_connection = google_cloudbuildv2_connection.my_connection.name
remote_uri = "URI"
}
其中:
- PROJECT_ID 是您的 Google Cloud 專案 ID。
- REPO_NAME 是 GitHub 存放區的名稱。
- REGION 是連線的區域。
- URI 是存放區的主機 URI。例如:
https://github.com/myuser/myrepo.git
。
後續步驟
- 瞭解如何透過 GitHub 建構存放區。
- 瞭解如何在 Compute Engine 上執行藍綠部署作業。
- 瞭解如何指定其他存放區做為建構作業的依附元件。