このページでは、GitHub リポジトリを Cloud Build に接続する方法について説明します。Cloud Build リポジトリの詳細については、Cloud Build リポジトリをご覧ください。
準備
-
Enable the Cloud Build and Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
- GitHub リポジトリにソースコードを用意します。
- GitHub ソース リポジトリに、
Dockerfileまたは Cloud Build 構成ファイルを配置します。 - 最初にリポジトリを Cloud Build に接続する場合は、リポジトリに対する管理者レベルの権限があることを確認してください。GitHub リポジトリの権限の詳細については、組織におけるリポジトリ権限レベルをご覧ください。
このページで
gcloudコマンドを使用するには、Google Cloud CLI をインストールします。
必要な IAM 権限
GitHub ホストを接続するには、Cloud Build 接続管理者(roles/cloudbuild.connectionAdmin)ロールをユーザー アカウントに付与します。
必要なロールをユーザー アカウントに追加するには、Cloud Build リソースへのアクセス権を構成するをご覧ください。Cloud Build に関係する IAM ロールの詳細については、IAM ロールと権限をご覧ください。
gcloud インストール手順を使用して接続を作成するには、Google Cloud プロジェクトで次のコマンドを実行して、Cloud Build サービス エージェントに Secret Manager 管理者ロール(roles/secretmanager.admin)を付与します。
PN=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")
CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com"
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${CLOUD_BUILD_SERVICE_AGENT}" \
--role="roles/secretmanager.admin"
GitHub ホストに接続する
コンソール
GitHub リポジトリを Cloud Build に接続するには:
Google Cloud コンソールで [リポジトリ] ページを開きます。
[リポジトリ] ページが表示されます。
上部のバーにあるプロジェクト セレクタで、 Google Cloud プロジェクトを選択します。
ページ上部の [第 2 世代] タブを選択します。
[ホスト接続の作成] をクリックして、新しいホストを Cloud Build に接続します。
左側のパネルで、ソース プロバイダとして Bitbucket を選択します。
[接続の構成] セクションで、次の情報を入力します。
[リージョン]: 接続のリージョンを選択します。
[名前]: 接続の名前を入力します。
[接続] をクリックします。
[接続] ボタンをクリックすると、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 ホストにプログラムで接続する
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 の個人アクセス トークンのアクセス トークンです。
- 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
以前の接続で取得した既存のトークンとインストール 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 でシークレットに付ける名前です。
シークレットの 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 はシークレット マネージャーに保存されているシークレットの名前です。
- 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 デプロイを実行する方法を学習する。
- ビルドの依存関係として追加のリポジトリを指定する方法を確認する。