Bitbucket データセンター ホストに接続する

このページでは、Bitbucket データセンター ホストを Cloud Build に接続する方法について説明します。Bitbucket データセンター ホストに接続すると、Bitbucket データセンター リポジトリが Cloud Build と統合されます。これにより、Bitbucket データセンターからリポジトリをビルドするようにビルドトリガーを構成したり、プライベート ネットワーク内の Bitbucket データセンターからリポジトリをビルドするようにビルドトリガーを構成したりできます。

始める前に

  • Enable the Cloud Build, Secret Manager, and Compute Engine APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

必要な IAM 権限

Bitbucket データセンター ホストに接続するために必要な権限を取得するには、ユーザー アカウントに対して次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

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

Bitbucket データセンター インスタンスがプライベート ネットワークでホストされている場合は、プライベート ネットワークで Bitbucket データセンターからリポジトリをビルドするを参照して、ホスト接続の構成に必要な追加の IAM ロールを確認してください。

個人用アクセス トークンを作成する

Bitbucket データセンター インスタンスのホスト接続を作成する前に、次の手順で Bitbucket データセンターに個人用アクセス トークンを作成します。

  1. Bitbucket データセンター インスタンスにログインします。

  2. 手順に沿って、ユーザー アカウントの HTTP アクセス トークンを作成します。

    1. スコープがリポジトリ管理者のアクセス トークンを作成し、リポジトリの接続と切断に使用します。

    2. スコープがリポジトリの読み取りのアクセス トークンを作成して、Cloud Build リポジトリがリポジトリ内のソースコードにアクセスできるようにします。

  3. トークン値を安全に保存します。これらのトークンを使用して、Bitbucket データセンター リポジトリに接続します。

Bitbucket データセンター ホストに接続する

コンソール

Google Cloud コンソールを使用して Bitbucket データセンター ホストを Cloud Build に接続するには:

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

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

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

  3. [ホストに接続] をクリックします。

  4. プルダウン メニューから [Bitbucket データセンター] を選択します。

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

    Bitbucket データセンター インスタンスを Cloud Build に接続するには、次の情報を入力します。

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

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

    3. ホスト URL: Bitbucket データセンター インスタンスのホスト URL。例: https://bbs.example-test.com:7990

    4. Google Cloud API キー: 認証情報の認証に使用する API キーを入力します。

    5. CA 証明書: 自己署名証明書。証明書のサイズは 10 KB 以下の PEM 形式(.pem.cer、または .crt)にする必要があります。このセクションを空白のままにすると、 Google Cloud はデフォルトの証明書セットの証明書を使用します。

    6. ユーザー名: Bitbucket データセンター アカウントのユーザー名。このアカウントには、Cloud Build に接続するリポジトリに対する管理者権限が必要です。

    7. 読み取りアクセス トークン: 読み取り権限を持つ Bitbucket データセンター アカウントの個人用アクセス トークンを入力します。

    8. 管理者アクセス トークン: プロジェクトとリポジトリに対する管理者権限を持つ Bitbucket データセンター アカウントの個人用アクセス トークンを入力します。

    9. [ネットワークの種類] で、次のいずれかのオプションを選択します。

      1. 公共のインターネット: 公共のインターネットを使用してインスタンスにアクセスできる場合は、このオプションを選択します。

      2. プライベート ネットワーク: インスタンスがプライベート ネットワークでホストされている場合は、このオプションを選択します。

        1. プロジェクト: Google Cloud プロジェクト ID を選択します。

        2. ネットワーク: プルダウン メニューからネットワークを選択します。ネットワークを作成していない場合は、VPC ネットワークを作成して管理するでネットワークの作成方法を確認してください。

        3. IP 範囲: ピアリングされたネットワークの割り振り範囲内で VM を割り振ることができる内部 IP 範囲を入力します。

          STARTING_IP/SUBNET_PREFIX_SIZE 形式のクラスレス ドメイン間ルーティング(CIDR)ルーティング表記を使用して範囲を指定できます。たとえば、192.0.2.0/24 の接頭辞の長さは 24 です。IP 範囲の最初の 24 ビットがサブネット マスク(192.0.2.0)として使用されますが、使用可能なホストアドレスの範囲は 192.0.2.0 から 192.0.2.255 です。

          注: 接頭辞長の値は /29 以下にする必要があります。範囲に値が指定されていない場合は、デフォルト値の /24 が自動的に割り当てられます。接頭辞長に値が指定されていない場合、ピアリングされた VPC ネットワーク内で IP アドレスが自動的に割り当てられます。IP アドレスに値が指定されていない場合、ピアリングされた VPC ネットワーク内の範囲が IP アドレスに自動的に割り振られます。

  5. [ホストに接続] をクリックします。

    Bitbucket データセンター インスタンスがピアリングされたネットワーク上にある場合、ホストの接続に数分かかることがあります。

    [リポジトリを接続] パネルにリダイレクトされます。

    ホスト接続を作成すると、個人用のアクセス トークンと Webhook シークレットは、Secret Manager に安全に保存されます。シークレットは、Secret Manager ページで確認および管理できます。

gcloud

gcloud コマンドを使用して Bitbucket データセンター ホストを Cloud Build に接続するには、ターミナルで「gcloud alpha builds enterprise-config bitbucket-data-center create」コマンドを実行する必要があります。Google Cloud コンソールを使用してホストを接続する場合とは異なり、個人用のアクセス トークンと Webhook シークレットを Secret Manager に手動で保存した後、次のコマンドを実行する必要があります。

gcloud alpha builds enterprise-config bitbucket-data-center create
    --name=CONFIG_NAME \
    --user-name=USERNAME \
    --host-uri=HOST_URI \
    --admin-access-token-secret-version=ADMIN_ACCESS_TOKEN_SECRET_VERSION \
    --read-access-token-secret-version=READ_ACCESS_TOKEN_SECRET_VERSION \
    --webhook-secret-secret-version=WEBHOOK_SECRET_SECRET_VERSION \
    --api-key=API_KEY \
    --peered-network=PEERED_NETWORK \
    --peered-network-ip-range=PEERED_NETWORK_IP_RANGE \
    --ssl-ca-file=SSL_CA_FILE

ここで

  • CONFIG_NAME は、Bitbucket データセンターの構成の名前です。
  • USERNAME は、Bitbucket データセンターのユーザー名です。
  • HOST_URI は、Bitbucket データセンター インスタンスのホスト URI です。
  • ADMIN_ACCESS_TOKEN_SECRET_VERSION は、Secret Manager に保存された管理者アクセス トークンのリソース名です。Secret Manager に保存されているシークレットの想定される形式は、projects/${PROJECT_ID}/secrets/${SECRET_NAME}/versions/${VERSION_NUMBER} です。シークレットの最新バージョンを使用するには、バージョンとして latest を指定できます。これは、Secret Manager に保存されている各リソースに適用されます。
  • READ_ACCESS_TOKEN_SECRET_VERSION は、Secret Manager に保存された読み取りアクセス トークンのリソース名です。
  • WEBHOOK_SECRET_SECRET_VERSION は、Secret Manager に保存された Webhook シークレットのリソース名です。
  • API_KEY は Google Cloud API キーです。
  • 省略可: PEERED_NETWORK は、オンプレミスで Bitbucket Data Center インスタンスに接続する VPC ネットワークです。詳細については、プライベート ネットワーク内の Bitbucket データセンターからリポジトリをビルドするをご覧ください。

  • 省略可: PEERED_NETWORK_IP_RANGE は、ピアリングされたネットワークの割り当て範囲内で VM を割り当てることができる内部 IP 範囲です。

  • SSL_CA_FILE は、Bitbucket データセンターへのリクエストに使用する SSL 証明書を含むローカル ファイルのパスです。証明書は PEM 形式にする必要があります。

API

API を使用して Bitbucket データセンター ホストを Cloud Build に接続するには、次の JSON テンプレートを使用します。 Google Cloud コンソールを使用してホストを接続する場合とは異なり、API を呼び出す前に、個人用のアクセス トークンと Webhook シークレットを Secret Manager に手動で保存する必要があります。

{
    "hostUri": "HOST_URI",
    "username": "USERNAME",
    "apiKey": "API_KEY",
    "secrets": {
      "adminAccessTokenVersionName": "ADMIN_ACCESS_TOKEN_SECRET_VERSION",
      "readAccessTokenVersionName": "READ_ACCESS_TOKEN_SECRET_VERSION",
      "webhookSecretVersionName": "WEBHOOK_SECRET_SECRET_VERSION",
    },
    "peeredNetwork": "PEERED_NETWORK",
    "peeredNetworkIpRange": "PEERED_NETWORK_IP_RANGE",
    "sslCa": "SSL_CERTIFICATE"
}

ここで

  • HOST_URI は、Bitbucket データセンター インスタンスのホスト URI です。
  • USERNAME は、Bitbucket データセンターのユーザー名です。
  • API_KEY は Google Cloud API キーです。
  • ADMIN_ACCESS_TOKEN_SECRET_VERSION は、Secret Manager に保存された管理者アクセス トークンのリソース名です。Cloud Build サービス エージェント(service-${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com)に、Secret Manager のシークレット アクセサーのロールを付与する必要がある場合があります。詳しくは、サービス アカウントに Secret Manager のロールを付与するをご覧ください。

  • READ_ACCESS_TOKEN_SECRET_VERSION は、Secret Manager に保存された読み取りアクセス トークンのリソース名です。

  • WEBHOOK_SECRET_SECRET_VERSION は、Secret Manager に保存された Webhook シークレットのリソース名です。

  • 省略可: PEERED_NETWORK は、オンプレミスで Bitbucket Data Center インスタンスにピアリングする VPC ネットワークです。

    STARTING_IP/SUBNET_PREFIX_SIZE 形式のクラスレス ドメイン間ルーティング(CIDR)ルーティング表記を使用して範囲を指定できます。たとえば、192.0.2.0/24 の接頭辞の長さは 24 です。IP 範囲の最初の 24 ビットがサブネット マスク(192.0.2.0)として使用されますが、使用可能なホストアドレスの範囲は 192.0.2.0 から 192.0.2.225 です。

  • 省略可: PEERED_NETWORK_IP_RANGE は、ピアリングされたネットワークの割り当て範囲内で VM を割り当てることができる内部 IP 範囲です。

  • 省略可: SSL_CERTIFICATE は、オンプレミスの Bitbucket データセンター インスタンスに使用される SSL 証明書です。

ターミナルで、次の curl コマンドを入力します。

  curl -X POST -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8" https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/bitbucketServerConfigs/?bitbucketServerConfigId=CONFIG_NAME -d @config.json

ここで

  • PROJECT_ID は Google Cloud プロジェクト ID です。
  • REGION は、Bitbucket データセンターの構成に関連付けられたリージョンです。
  • CONFIG_NAME は、Bitbucket データセンターの構成の名前です。

成功すると、レスポンスの本文には新しく作成された Operation のインスタンスが含まれます。

ターミナルで、次の curl コマンドを入力します。

  curl -X GET -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8"  -H "x-goog-user-project: PROJECT_NUMBER" https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID

ここで

  • PROJECT_NUMBER は Google Cloud プロジェクト番号です。
  • PROJECT_ID は Google Cloud プロジェクト ID です。
  • REGION は、Bitbucket データセンターの構成に関連付けられたリージョンです。
  • OPERATION_ID は、Bitbucket データセンターの構成作成オペレーションの ID です。

オペレーションが完了したことを示す done: true がレスポンスに含まれるまで、GetOperation API コマンドを実行したままにする必要が生じる場合があります。Bitbucket データセンターの構成が正常に作成された場合は、response.value フィールドでその構成を確認できます。正常に作成されなかった場合は、error フィールドで詳細なエラーレポートを確認してください。

古い Bitbucket データセンター アクセス トークンまたは期限切れの Bitbucket データセンター アクセス トークンをローテーションする

Bitbucket データセンター アクセス トークンの有効期限が切れると、Cloud Build ホスト接続が Bitbucket データセンター リポジトリから切断されます。そのため、次のような状況でエラーが発生します。

  • Bitbucket データセンター リポジトリの Cloud Build 接続をリンクしようとすると、Failed to fetch repositories to link. Check that Cloud Build is still authorized to access data from the selected connection メッセージが表示されます。

  • [トリガー] ページで [実行] をクリックすると、[トリガーを実行] ページが開き、Failed to list branches. You can still enter one manually メッセージが表示されます。

接続の古いトークンまたは有効期限切れのトークンをローテーションするには、次の操作を行います。

  1. ホスト接続に関連付けられているシークレットを見つけます。

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

      gcloud builds connections describe CONNECTION_PATH --region=REGION
      

      ここで

      • CONNECTION_PATH は、Cloud Build の Bitbucket データセンター ホスト接続のパスです(形式: projects/PROJECT_ID/locations/REGION/connections/CONNECTION_NAME)。
      • REGION は、接続のリージョンです。
    2. コマンドの出力で、ユーザー トークン フィールドの値を探します。readAuthorizerCredential.userTokenSecretVersionRead トークンの Secret Manager 名を示し、authorizerCredential.userTokenSecretVersionAdmin トークンの Secret Manager 名を示します。これらの名前は Secret Manager にシークレットとして保存されます。

  2. Bitbucket データセンターで各アクセス トークンをローテーションします。

    1. Cloud Build ホスト接続に接続されている Bitbucket データセンター リポジトリに移動します。

    2. Bitbucket のドキュメントの手順に沿って、アクセス トークンをローテーションします。トークンをローテーションすると、Bitbucket Data Center は新しい認証情報で新しいトークンを作成し、そのトークンの以前のバージョンを無効にします。ローテーションされたトークンには、元のトークンと同じ権限とスコープがあります。

    3. ローテーションされたトークンの ID をコピーします。

  3. トークンごとに新しいシークレット バージョンを作成します。

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

      [シークレット マネージャー] ページを開く

    2. ローテーションしたトークンごとに、ステップ 1 で特定したシークレット名を見つけて [アクション] をクリックし、[新しいバージョンを追加] をクリックします。

    3. [新しいバージョンを追加] ウィンドウで、ローテーションされたトークンの ID を入力し、[新しいバージョンを追加] をクリックします。

詳細については、Bitbucket Data Center のドキュメントのアクセス トークンBitbucket のセキュリティ強化: アクセス トークンの有効期限の導入をご覧ください。

次のステップ