GitHub リポジトリに接続する

このページでは、GitHub リポジトリを Cloud Build に接続する方法について説明します。Cloud Build リポジトリの詳細については、Cloud Build リポジトリをご覧ください。

準備

  • Enable the Cloud Build and Secret Manager APIs.

    Enable the APIs

  • GitHub リポジトリにソースコードを用意します。
  • GitHub ソース リポジトリに、Dockerfile または Cloud Build 構成ファイルを配置します。
  • 最初にリポジトリを Cloud Build に接続する場合は、リポジトリに対する管理者レベルの権限があることを確認してください。GitHub リポジトリの権限の詳細については、組織におけるリポジトリ権限レベルをご覧ください。
  • このページで gcloud コマンドを使用するには、Google Cloud CLI をインストールします。

GitHub ホストを接続する

コンソール

GitHub リポジトリを Cloud Build に接続するには:

  1. Google Cloud コンソールで [リポジトリ] ページを開きます。

    [リポジトリ] ページを開く

    [リポジトリ] ページが表示されます。

  2. 上部のバーにあるプロジェクト セレクタで、Google Cloud プロジェクトを選択します。

  3. ページ上部にある [第 2 世代] タブを選択します。

  4. [ホスト接続を作成] をクリックして、新しいホストを Cloud Build に接続します。

  5. 左側のパネルで、ソース プロバイダとして [GitHub] を選択します。

  6. [接続の構成] セクションで、次の情報を入力します。

    1. [リージョン]: 接続のリージョンを選択します。

    2. 名前: 接続の名前を入力します。

  7. [接続] をクリックします。

    [接続] ボタンをクリックすると、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 ホストを接続するには、次の手順を行います。

  1. 次のコマンドを入力して、GitHub リポジトリへの接続を開始します。

     gcloud builds connections create github CONNECTION_NAME --region=REGION
    

    ここで

    • CONNECTION_NAME は接続の名前です。
    • REGION はトリガーのリージョンです。

    gcloud builds connections コマンドを実行すると、Cloud Build GitHub アプリを承認するためのリンクが表示されます。

  2. github.com アカウントにログインします。

  3. リンクをクリックして Cloud Build GitHub アプリを承認します。

    アプリを承認すると、Cloud Build は、認証トークンを Google Cloud プロジェクトの Secret Manager に保存します。シークレットは、Secret Manager ページで確認できます。

  4. Cloud Build GitHub アプリを、ご利用のアカウントか、所有する組織にインストールします。

    GitHub アカウントを使用してインストールを許可し、指示が表示されたらリポジトリの権限を選択します。

  5. 次のコマンドを実行して、GitHub 接続のインストールを確認します。

     gcloud builds connections describe CONNECTION_NAME --region=REGION
    

    ここで

    • CONNECTION_NAME は接続の名前です。
    • REGION はトリガーのリージョンです。

    installationState フィールドが COMPLETE に設定されていれば、接続は正常にインストールされています。そうでない場合、installationState フィールドには、必要な追加手順へのリンクが表示されます。

これで、GitHub 接続が正常に作成されました。

GitHub ホストをプログラムで接続する

Terraform

Google Terraform プロバイダを使用して GitHub ホストを Cloud Build に接続するには、次の手順を行います。

  1. ご利用の GitHub アカウントか所有する組織に Cloud Build GitHub アプリをインストールします。

  2. 個人用のアクセス トークンを作成します

    トークンに有効期限が設定されていないことを確認し、GitHub に指示が表示されたら、reporead: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 ホストを接続するには、次の手順を行います。

  1. ご利用の GitHub アカウントか所有する組織に Cloud Build GitHub アプリをインストールします。

  2. 個人用のアクセス トークンを作成します

    トークンに有効期限が設定されていないことを確認し、GitHub に指示が表示されたら、reporead:user の権限を選択します。アプリが組織にインストールされている場合は、必ず read:org 権限も選択してください。

    個人用のアクセス トークンを生成したら、そのトークンは安全な場所に保存します。生成したトークンは、次の手順で使用します。

  3. 次のコマンドを実行して、Google Cloud プロジェクトの Secret Manager にトークンを保存します。

        echo -n TOKEN | gcloud secrets create SECRET_NAME --data-file=-
    

    ここで

    • TOKEN は、個人用のアクセス トークンです。
    • SECRET_NAME は、Secret Manager でシークレットに付ける名前です。
  4. シークレットの 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"
    
  5. 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 リポジトリをホスト接続に接続するには、次の手順を行います。

  1. Google Cloud コンソールで [リポジトリ] ページを開きます。

    [リポジトリ] ページを開く

    [リポジトリ] ページが表示されます。

  2. ページ上部にある [第 2 世代] タブを選択します。

  3. [リポジトリをリンク] をクリックして、接続からリポジトリをリンクします。

    [リポジトリを接続] パネルが表示されます。

  4. [リポジトリを接続] パネルで、次の情報を入力します。

    1. 接続: プルダウン メニューから接続を選択します。
    2. リポジトリ: 接続にリンクするリポジトリを選択します。

    3. リポジトリ名: リポジトリの名前を入力します。

      1. 生成済み: このオプションを選択すると、Cloud Build によって選択したリポジトリのリポジトリ名が自動的に生成されます。
      2. 手動: このオプションを選択して、選択したリポジトリの名前を手動で指定します。

        [手動] を選択した場合、リポジトリ名セクションで選択したリポジトリの名前を変更できます。

  5. [リンク] をクリックして、リポジトリを接続にリンクします。

これで、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 接続にリンクされました。

次のステップ