GitHub リポジトリに接続する

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

始める前に

  • Cloud Build API と Secret Manager API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。詳しくは、ロールを付与する方法をご覧ください。

    API を有効にする

  • 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. 左側のパネルで、ソース プロバイダとして Bitbucket を選択します。

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

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

    • [名前]: 接続の名前を入力します。

  7. 省略可: GitHub リポジトリのアクセス トークンの暗号化に使用される暗号鍵を管理する場合は、[暗号化] セクションに移動して、Cloud Key Management Service 鍵を選択します。詳細については、Secret Manager の顧客管理の暗号鍵を有効にするをご覧ください。

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

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

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

     gcloud builds connections create github CONNECTION_NAME --region=REGION
    

    ここで

    • CONNECTION_NAME は、Cloud Build に表示される接続の名前です。
    • 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 は、Cloud Build の GitHub ホスト接続の名前です。
    • REGION はトリガーのリージョンです。

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

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

GitHub ホストにプログラムで接続するには、まず接続の認証トークンを構成してから、Cloud Build で GitHub 接続を作成する必要があります。

認証トークンを構成する

GitHub ホストにプログラムで接続するには、認証トークンのシークレットを含む Cloud Build GitHub 接続を作成する必要があります。認証トークンは次の 2 つの方法で取得できます。

  • GitHub で個人アクセス トークンを作成します。

  • 既存の Cloud Build GitHub 接続のトークンを使用します。この方法は、GitHub アカウントに個人用アクセス トークンの作成を妨げる制限がある場合に役立ちます。また、スクリプトから接続を作成するときにこのトークンを参照すると、ウェブブラウザを使用して接続を手動で認証する必要がなくなります。

個人用アクセス トークン

  1. GitHub ドキュメントの個人アクセス トークンを作成するの手順に沿って操作します。

  2. GitHub でプロンプトが表示されたら、次の OAuth スコープを選択します。

    • repo: 一般公開リポジトリと非公開リポジトリへの完全アクセス権を付与します。
    • read:user: ユーザーのプロフィール データの読み取りアクセス権を付与します。
    • 組織のメンバーシップとプロジェクトへの読み取り専用アクセス権(アプリが組織にインストールされている場合)の read:org
  3. 個人用アクセス トークンの値を保存します。このキーは後の手順で使用します。

既存の接続

  1. gcloud CLI で次のコマンドを実行します。

    gcloud builds connections describe CONNECTION_NAME --region=REGION
    

    ここで

    • CONNECTION_NAME は GitHub ホスト接続の名前です。
    • REGION はトリガーのリージョンです。
  2. コマンド出力で、authorizerTokenSecretVersion の値は、接続の認証トークンを含むシークレットの ID です。この値をコピーして安全な場所に保存します。生成したトークンは、次の手順で使用します。

GitHub 接続を作成する

Terraform または gcloud CLI を使用して GitHub 接続を作成します。

Terraform

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

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

  2. 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 に接続するには、次の操作を行います。

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

  2. 省略可。認証に GitHub 個人用アクセス トークンを使用している場合は、次のコマンドを実行して、 Google Cloud プロジェクトの Secret Manager にトークンを保存します。

    echo -n 'TOKEN' | gcloud secrets create SECRET_NAME --data-file=-
    
  3. シークレットの 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"
    
  4. 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 リポジトリをホスト接続に接続する手順は次のとおりです。

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

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

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

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

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

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

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

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

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

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

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

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

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

次のステップ