このページでは、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 をインストールします。
必要な IAM 権限
GitHub ホストを接続するには、Cloud Build 接続管理者(roles/cloudbuild.connectionAdmin
)ロールをユーザー アカウントに付与します。
必要なロールをユーザー アカウントに追加するには、Cloud Build リソースへのアクセス権を構成するをご覧ください。Cloud Build に関係する IAM ロールの詳細については、IAM ロールと権限をご覧ください。
gcloud
インストール手順を使用して接続を作成するには、Google Cloud プロジェクトで次のコマンドを実行して、Secret Manager 管理者のロール(roles/secretmanager.admin
)を Cloud Build サービス エージェントに付与します。
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 に接続します。
左側のパネルで、ソース プロバイダとして [GitHub] を選択します。
[接続の構成] セクションで、次の情報を入力します。
[リージョン]: 接続のリージョンを選択します。
名前: 接続の名前を入力します。
[接続] をクリックします。
[接続] ボタンをクリックすると、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 の [リポジトリ] ページにリダイレクトされます。
これで、GitHub 接続が正常に作成されました。
gcloud
gcloud
を使用して GitHub ホストを接続するには、次の手順を行います。
次のコマンドを入力して、GitHub リポジトリへの接続を開始します。
gcloud builds connections create github CONNECTION_NAME --region=REGION
ここで
- CONNECTION_NAME は接続の名前です。
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 は接続の名前です。
- REGION はトリガーのリージョンです。
installationState
フィールドがCOMPLETE
に設定されていれば、接続は正常にインストールされています。そうでない場合、installationState
フィールドには、必要な追加手順へのリンクが表示されます。
これで、GitHub 接続が正常に作成されました。
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 { automatic = true } } 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 は GitHub 接続の名前です。
- INSTALLATION_ID は、Cloud Build GitHub アプリのインストール ID です。インストール ID は、Cloud Build GitHub アプリの URL にあります。次の URL
https://github.com/settings/installations/1234567
では、インストール ID は数値1234567
です。
これで、GitHub 接続が正常に作成されました。
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 は接続の名前です。
- 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 リポジトリを接続する
コンソール
GitHub リポジトリをホスト接続に接続するには、次の手順を行います。
Google Cloud コンソールで [リポジトリ] ページを開きます。
[リポジトリ] ページが表示されます。
ページ上部にある [第 2 世代] タブを選択します。
[リポジトリをリンク] をクリックして、接続からリポジトリをリンクします。
[リポジトリを接続] パネルが表示されます。
[リポジトリを接続] パネルで、次の情報を入力します。
- 接続: プルダウン メニューから接続を選択します。
リポジトリ: 接続にリンクするリポジトリを選択します。
リポジトリ名: リポジトリの名前を入力します。
- 生成済み: このオプションを選択すると、Cloud Build によって選択したリポジトリのリポジトリ名が自動的に生成されます。
手動: このオプションを選択して、選択したリポジトリの名前を手動で指定します。
[手動] を選択した場合、リポジトリ名セクションで選択したリポジトリの名前を変更できます。
[リンク] をクリックして、リポジトリを接続にリンクします。
これで、GitHub リポジトリが接続にリンクされました。
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 は接続の名前です。
- REGION は、接続のリージョンです。
これで、リポジトリが GitHub 接続にリンクされました。
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 接続にリンクされました。
次のステップ
- GitHub からリポジトリを構築する方法を確認する。
- Compute Engine で Blue/Green デプロイを実行する方法を学習する。