このページでは、GitHub リポジトリを Cloud Build に接続する方法について説明します。Cloud Build リポジトリの詳細については、Cloud Build リポジトリをご覧ください。
始める前に
Cloud Build API と Secret Manager API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。詳しくは、ロールを付与する方法をご覧ください。
- GitHub リポジトリにソースコードを用意します。
- GitHub ソース リポジトリに、
Dockerfileまたは Cloud Build 構成ファイルを配置します。 - 最初にリポジトリを Cloud Build に接続する場合は、リポジトリに対する管理者レベルの権限があることを確認してください。GitHub リポジトリの権限の詳細については、組織におけるリポジトリ権限レベルをご覧ください。
このページで
gcloudコマンドを使用するには、Google Cloud CLI をインストールします。
GitHub ホストに接続する
コンソール
GitHub リポジトリを Cloud Build に接続するには:
Google Cloud コンソールで [リポジトリ] ページを開きます。
[リポジトリ] ページが表示されます。
上部のバーにあるプロジェクト セレクタで、 Google Cloud プロジェクトを選択します。
ページ上部の [第 2 世代] タブを選択します。
[ホスト接続の作成] をクリックして、新しいホストを Cloud Build に接続します。
左側のパネルで、ソース プロバイダとして Bitbucket を選択します。
[接続の構成] セクションで、次の情報を入力します。
[リージョン]: 接続のリージョンを選択します。
[名前]: 接続の名前を入力します。
省略可: GitHub リポジトリのアクセス トークンの暗号化に使用される暗号鍵を管理する場合は、[暗号化] セクションに移動して、Cloud Key Management Service 鍵を選択します。詳細については、Secret Manager の顧客管理の暗号鍵を有効にするをご覧ください。
[接続] をクリックします。
[接続] ボタンをクリックすると、Cloud Build GitHub アプリから 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 ホストにプログラムで接続する
GitHub ホストにプログラムで接続するには、まず接続の認証トークンを構成してから、Cloud Build で GitHub 接続を作成する必要があります。
認証トークンを構成する
GitHub ホストにプログラムで接続するには、認証トークンのシークレットを含む Cloud Build GitHub 接続を作成する必要があります。認証トークンは次の 2 つの方法で取得できます。
GitHub で個人アクセス トークンを作成します。
既存の Cloud Build GitHub 接続のトークンを使用します。この方法は、GitHub アカウントに個人用アクセス トークンの作成を妨げる制限がある場合に役立ちます。また、スクリプトから接続を作成するときにこのトークンを参照すると、ウェブブラウザを使用して接続を手動で認証する必要がなくなります。
個人用アクセス トークン
GitHub ドキュメントの個人アクセス トークンを作成するの手順に沿って操作します。
GitHub でプロンプトが表示されたら、次の OAuth スコープを選択します。
repo: 一般公開リポジトリと非公開リポジトリへの完全アクセス権を付与します。read:user: ユーザーのプロフィール データの読み取りアクセス権を付与します。- 組織のメンバーシップとプロジェクトへの読み取り専用アクセス権(アプリが組織にインストールされている場合)の
read:org。
個人用アクセス トークンの値を保存します。このキーは後の手順で使用します。
既存の接続
gcloud CLI で次のコマンドを実行します。
gcloud builds connections describe CONNECTION_NAME --region=REGIONここで
- CONNECTION_NAME は GitHub ホスト接続の名前です。
- REGION はトリガーのリージョンです。
コマンド出力で、
authorizerTokenSecretVersionの値は、接続の認証トークンを含むシークレットの ID です。この値をコピーして安全な場所に保存します。生成したトークンは、次の手順で使用します。
GitHub 接続を作成する
Terraform または gcloud CLI を使用して GitHub 接続を作成します。
Terraform
Google Terraform プロバイダを使用して GitHub ホストを Cloud Build に接続するには、次の手順を行います。
ご利用の GitHub アカウントか所有する組織に Cloud Build GitHub アプリをインストールします。
Terraform で GitHub 接続を構成します。次の Terraform コードサンプルは、次の処理を行う構成を示しています。
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 の GitHub 個人アクセス トークンまたはシークレットの ID です。
- GITHUB_PAT は、GitHub の個人アクセス トークンのアクセス トークンです。
- PROJECT_ID は Google Cloud プロジェクト ID です。
- REGION は、接続のリージョンです。
- CONNECTION_NAME は、Cloud Build に表示される接続の名前です。
- INSTALLATION_ID は、Cloud Build GitHub アプリのインストール ID です。インストール ID は、Cloud Build GitHub アプリの URL にあります。次の URL
https://github.com/settings/installations/1234567では、インストール ID は数値1234567です。
gcloud
GitHub ホストを Cloud Build に接続するには、次の操作を行います。
ご利用の GitHub アカウントか所有する組織に Cloud Build GitHub アプリをインストールします。
省略可。認証に GitHub 個人用アクセス トークンを使用している場合は、次のコマンドを実行して、 Google Cloud プロジェクトの Secret Manager にトークンを保存します。
echo -n 'TOKEN' | gcloud secrets create SECRET_NAME --data-file=-シークレットの 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/VERSION \ --app-installation-id=INSTALLATION_ID --region=REGIONここで
- CONNECTION_NAME は、Cloud Build の GitHub ホスト接続の名前です。
- PROJECT_ID は Google Cloud プロジェクト ID です。
- SECRET_NAME はシークレット マネージャーに保存されているシークレットの名前です。
- VERSION はシークレットのバージョンです。
- INSTALLATION_ID は、GitHub アプリのインストール ID です。インストール ID は、Cloud Build GitHub アプリの URL にあります。次の URL
https://github.com/settings/installations/1234567では、インストール ID は数値1234567です。 - REGION は、接続のリージョンです。
GitHub リポジトリを接続する
コンソール
GitHub リポジトリをホスト接続に接続する手順は次のとおりです。
Google Cloud コンソールで [リポジトリ] ページを開きます。
[リポジトリ] ページが表示されます。
ページ上部の [第 2 世代] タブを選択します。
[リポジトリをリンク] をクリックして、接続からリポジトリをリンクします。
[リポジトリを接続] パネルが表示されます。
[リポジトリをリンク] パネルで、次の情報を入力します。
- [接続]: プルダウン メニューから接続を選択します。
リポジトリ: 接続にリンクするリポジトリを選択します。
リポジトリ名: リポジトリの名前を入力します。
- 生成済み: このオプションを選択すると、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 は、GitHub ホストに接続するで Cloud Build に作成された 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 で Blue/Green デプロイを実行する方法を学習する。
- 追加のリポジトリをビルドの依存関係として指定する方法を確認する。