Bitbucket Cloud ホストに接続する

このページでは、Bitbucket Cloud ホストを Cloud Build に接続する方法について説明します。

始める前に

  • Cloud Build, Secret Manager, and Compute Engine API を有効にします。

    API を有効にする

必要な IAM 権限

接続に必要な権限を取得するには、ユーザー アカウントに対する Cloud Build 接続管理者(cloudbuild.connectionAdmin)IAM ロールを付与するように管理者に依頼してください。ロールの付与の詳細については、アクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

Bitbucket Cloud アクセス トークンを作成する

Bitbucket Cloud に次の 2 つのアクセス トークンを作成します。

  • 管理者アクセス トークン - リポジトリの接続と切断に使用します。
  • 読み取りアクセス トークン - Cloud Build にソースコードへのアクセスを許可します。

これらのトークンを作成する手順は次のとおりです。

  1. Bitbucket Cloud にログインします。

  2. Bitbucket Cloud の手順に従って、リポジトリプロジェクト またはワークスペースにリンクするアクセス トークンを作成します。

    次の権限を付与します。

    • 管理者アクセス トークン:

      • リポジトリ: 読み取り管理者
      • pull リクエスト: 読み取り
      • Webhook: 読み取り書き込み
    • 読み取りアクセス トークン:

      • リポジトリ: 読み取り
  3. 次の手順で使用するためにトークンをコピーします。

Bitbucket Cloud ホストに接続する

コンソール

次の手順で、Cloud Build を Bitbucket Cloud ホストに接続します。

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

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

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

  2. プロジェクト セレクタで、Google Cloud プロジェクトを選択します。

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

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

  5. ソース プロバイダとして Bitbucket を選択します。

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

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

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

    3. [ホストの詳細] セクションで、ホストタイプとして [Bitbucket Cloud] を選択します。

    4. ワークスペース: Bitbucket Cloud リポジトリのワークスペース ID を入力します。

    5. アクセス トークン: 以前に作成した管理者アクセス トークンを入力します。

    6. 読み取りアクセス トークン: 以前に作成した読み取りアクセス トークンを入力します。

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

    新しい接続が [リポジトリ] ページに表示されます。

gcloud

  1. 認証情報を保存するには、次の手順を行います。

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

      echo -n ADMIN_TOKEN | gcloud secrets create ADMIN_SECRET_NAME --data-file=-
      
      echo -n READ_TOKEN | gcloud secrets create READ_SECRET_NAME --data-file=-
      

      ここで

      • ADMIN_TOKEN は、管理者アクセス トークンです。
      • ADMIN_SECRET_NAME は、Secret Manager で管理者アクセス トークンのシークレットに付ける名前です。
      • READ_TOKEN は、読み取りアクセス トークンです。
      • READ_SECRET_NAME は、Secret Manager で読み取りアクセス トークンのシークレットに付ける名前です。
    2. 次のコマンドを実行して、Secret Manager で Webhook シークレットを作成します。ここで、WEBHOOK_SECRET_NAME は Webhook シークレットに付ける名前です。

      echo -n ${ex.(random-uuid)} | gcloud secrets create WEBHOOK_SECRET_NAME --data-file=-
      
    3. Secret がすべて同じプロジェクト内にない場合は、次のコマンドを実行して Cloud Build サービス アカウントへのアクセスを許可します。

      PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
      CLOUD_BUILD_SERVICE_ACCOUNT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com"
      gcloud secrets add-iam-policy-binding ADMIN_SECRET_NAME \
          --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \
          --role="roles/secretmanager.secretAccessor"
      
      gcloud secrets add-iam-policy-binding READ_SECRET_NAME \
          --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \
          --role="roles/secretmanager.secretAccessor"
      
      gcloud secrets add-iam-policy-binding WEBHOOK_SECRET_NAME \
          --member="serviceAccount:${CLOUD_BUILD_SERVICE_ACCOUNT}" \
          --role="roles/secretmanager.secretAccessor"
      

      ここで

      • PROJECT_ID はユーザーの Google Cloud プロジェクト ID です。
      • ADMIN_SECRET_NAME は、管理トークン シークレットの名前です。
      • READ_SECRET_NAME は、読み取りトークンのシークレットの名前です。
      • WEBHOOK_SECRET_NAME は、Webhook シークレットの名前です。
  2. 次のコマンドを使用して、Cloud Build を Bitbucket Cloud ホストに接続します。

    gcloud builds connections create bitbucket-cloud CONNECTION_NAME \
        --workspace=WORKSPACE_ID \
        --project=PROJECT_ID \
        --region=REGION \
        --authorizer-token-secret-version=projects/PROJECT_ID/secrets/ADMIN_SECRET_NAME/versions/latest \
        --read-authorizer-token-secret-version=projects/PROJECT_ID/secrets/READ_SECRET_NAME/versions/latest \
        --webhook-secret-secret-version=projects/PROJECT_ID/secrets/WEBHOOK_SECRET_NAME/versions/1
    

    ここで

    • CONNECTION_NAME は、Bitbucket Cloud ホストへの接続に付ける名前です。
    • WORKSPACE_ID は、Bitbucket Cloud リポジトリのワークスペース ID です。
    • PROJECT_ID はユーザーの Google Cloud プロジェクト ID です。
    • REGION は、ホスト接続のリージョンです。
    • ADMIN_SECRET_NAME は、管理トークン シークレットの名前です。
    • READ_SECRET_NAME は、読み取りアクセス トークンのシークレットの名前です。
    • WEBHOOK_SECRET_NAME は、Webhook シークレットの名前です。

次のステップ