Bitbucket Server からのリポジトリのビルド

Cloud Build を使用すると、Bitbucket Server でホストされているリポジトリからビルドするトリガーを作成できます。これにより、Bitbucket Server リポジトリに関連付けられた commit プッシュや pull リクエストなどのイベントに対応してビルドを実行できます。

このページでは、Bitbucket Server インスタンスでトリガー機能を有効にする方法について説明します。

始める前に

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

    API を有効にする

  • Bitbucket Server インスタンスをまだインストールしていない場合、インストールの手順については、Bitbucket Server インストール ガイドをご覧ください。
  • [省略可] Bitbucket Server インスタンスがオンプレミス環境でホストされている場合は、Service Networking API を有効にして Virtual Private Cloud ネットワークとピアリングします。

設定

Bitbucket Server トリガーを作成する前に、Bitbucket Server からの受信イベントを認証して受け入れるための API キーを取得する必要があります。さらに、Webhook を作成してリポジトリ データを取得するには、Google Cloud プロジェクトで IAM 権限を付与して、トリガーを作成し、Bitbucket Server に個人アクセス トークンを作成する必要があります。

このセクションでは、Bitbucket Server トリガーを作成する前に完了する必要がある手順について説明します。

API キーの取得

ホスト リポジトリを接続して着信 Webhook イベントを認証するには、API キーが必要となります。

API キーを取得するには:

  1. Google Cloud Console の認証情報ページを開きます。

    [認証情報] ページを開く

  2. [認証情報を作成] をクリックします。

  3. [API キー] をクリックします。

    作成した API キーとともにポップアップ ボックスが表示されます。このキーを使用するには、key=API_KEY をアプリケーションに渡します。

  4. キーを制限する場合は、[キーを制限] をクリックして、キーを保護する追加の手順を行います。また、キーで API を呼び出せるように、Cloud Build API を選択してください。

    制限しない場合は、[閉じる] をクリックします。

必要な IAM 権限

Bitbucket Server ホストを接続するには、Cloud Build 編集者(roles/cloudbuild.builds.editorロールと Cloud Build 統合オーナー(cloudbuild.integrations.ownerロールをユーザー アカウントに追加します。

必要なロールをユーザー アカウントに追加するには、Cloud Build リソースへのアクセスの構成をご覧ください。Cloud Build に関係する IAM ロールについて詳しくは、IAM ロールと権限をご覧ください。

VPC ネットワークのピアリング

GitHub Enterprise インスタンスがオンプレミス環境でホストされ、公共のインターネット接続経由でアクセスできない場合は、オンプレミス ネットワークを Google Cloud にピアリングして VPC ネットワークを設定する必要があります。

  1. Service Networking API を有効にします
  2. 新しい VPC ネットワークを作成するか、既存の VPC ネットワークを選択します。注: オンプレミスの Bitbucket Server インスタンスにアクセスできるように VPC ネットワークを構成する必要があります。
  3. VPC ネットワークに名前付き IP 範囲を割り当てます。Cloud Build プライベート プールで VPC ネットワークを使用するには、接頭辞の長さを /23 以下(/22/21 など)にする必要があります。
  4. VPC ネットワークと Google Cloud の間の VPC ネットワーク ピアリング接続を確立します。詳細については、プライベート接続の作成をご覧ください。
  5. Bitbucket Server インスタンスに DNS が構成されている場合は、DNS ゾーンをサービス プロバイダに手動でピアリングする必要があります。詳細については、プライベート DNS ゾーンをサービス プロデューサーと共有するをご覧ください。
  6. [省略可] Cloud プロジェクトからネットワークをピアリングしたくない場合は、共有 VPC を設定して、代わりに Cloud プロジェクトにそのネットワークを使用させることができます(プロジェクトが組織の一部である場合)。共有 VPC は Service Networking API とピアリングする必要があります。

個人用アクセス トークンの作成

次のタスクを実行するには、Bitbucket Server に、個人用のアクセス トークンを 2 つ作成する必要があります。

これらの個人用のアクセス トークンは、必要最小限の権限です。追加の権限は、必要に応じて、Bitbucket Server に構成します。たとえば、Bitbucket Server アカウントを選択して、Bitbucket Server インスタンス上のリポジトリのサブセットにのみアクセスし、Cloud Build で利用できる対象を細かく制御できます。

個人用のアクセス トークンを作成したら、トークン値を安全に保存します。これらのトークンは、後で Bitbucket Server リポジトリに接続するために使用します。

Bitbucket サーバーからのトリガーの起動

このセクションでは、Bitbucket Server リポジトリを Cloud Build に接続し、接続されたリポジトリに自動的にビルドを起動するトリガーを作成する方法について説明します。オンプレミス環境で Bitbucket Server トリガーを使用する場合は、Bitbucket サーバーからオンプレミス環境でリポジトリをビルドをご覧ください。

Bitbucket Server ホストへの接続

Console

Google Cloud Console を使用して Bitbucket Server ホストを Cloud Build に接続するには:

  1. Google Cloud Console で [リポジトリの管理] ページを開きます。

    [リポジトリの管理] ページを開く

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

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

    次の情報を入力して、Bitbucket Server インスタンスを Cloud Build に接続します。

    • Host url: Bitbucket Server インスタンスのホスト URL。例: https://bbs.example-test.com:7990
    • Google Cloud API キー: 認証情報の認証に使用する API キー。
    • [省略可] CA 証明書: 自己署名証明書。証明書のサイズは 10 KB 以下の PEM 形式(.pem.cer、または .crt)にする必要があります。このセクションを空白のままにすると、デフォルトの証明書のセットが使用されます。
    • ユーザー名: Bitbucket Server アカウントのユーザー名。このアカウントには、Cloud Build に接続するリポジトリに対する管理者権限が必要です。
    • 読み取りアクセス トークン: 読み取り権限を持つ Bitbucket Server アカウントの個人用アクセス トークン。
    • 管理者アクセス トークン: プロジェクトとサーバー リポジトリに対する管理者権限を持つ Bitbucket Server アカウントの個人アクセス トークン。
    • [省略可] ネットワーク プロジェクト: オンプレミス ネットワークのネットワーク プロジェクト ID。
    • [省略可] ネットワーク名: オンプレミス ネットワークのネットワーク名。
  3. [ホストに接続] をクリックします。

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

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

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

gcloud

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

gcloud alpha builds enterprise-config bitbucketserver create
    --name=BITBUCKET_SERVER_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 \
    --ssl-ca-file=SSL_CA_FILE

ここで

  • BITBUCKET_SERVER_CONFIG_NAME は、Bitbucket Server 構成の名前です。
  • USERNAME は、Bitbucket Server のユーザー名です。
  • HOST_URI は、Bitbucket Server インスタンスのホスト 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 Server インスタンスに接続する VPC ネットワークです。
  • SSL_CA_FILE は、Bitbucket Server へのリクエストに使用する SSL 証明書を含むローカル ファイルへのパスです。証明書は PEM 形式にする必要があります。

API

API を使用して Bitbucket Server ホストを Cloud Build に接続するには、次の JSON テンプレートを使用します。Google Cloud Console を使用してホストを接続する場合とは異なり、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,
      "sslCa": SSL_CERTIFICATE
  }

ここで

  • HOST_URI は、Bitbucket Server インスタンスのホスト URI です。
  • USERNAME は、Bitbucket Server のユーザー名です。
  • 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 Server インスタンスにピアリングする VPC ネットワークです。

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

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

  curl -X POST -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/global/bitbucketServerConfigs/?bitbucketServerConfigId=BITBUCKET_SERVER_CONFIG_NAME -d @config.json

ここで

  • PROJECT_NUMBER は Cloud プロジェクト番号です。
  • PROJECT_ID は Cloud プロジェクト ID です。
  • BITBUCKET_SERVER_CONFIG_NAME は、Bitbucket Server 構成の名前です。

成功すると、レスポンスの本文には新しく作成された 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/global/operations/OPERATION_ID

ここで

  • PROJECT_NUMBER は Cloud プロジェクト番号です。
  • PROJECT_ID は Cloud プロジェクト ID です。
  • OPERATION_ID は、Bitbucket Server 構成作成オペレーションの ID です。

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

Bitbucket Server リポジトリへの接続

Console

Google Cloud Console を使用して Bitbucket Server リポジトリを Cloud Build に接続するには:

  1. Google Cloud Console で [トリガー] ページを開きます。

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

  2. [リポジトリを接続] をクリックします。

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

  3. [ソースの選択] で [Bitbucket Server] を選択します。

  4. [リポジトリを選択] で、Cloud Build に接続する Bitbucket Server リポジトリを選択します。

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

    リポジトリが接続されると、Cloud Build は Bitbucket Server インスタンスのリポジトリに Webhook を構成します。レポジトリに変更を加えた場合、リポジトリは Webhook を送信して対応する Bitbucket Server トリガーを呼び出します。1 つのリポジトリは、複数のホスト接続を使用して複数回接続することもできます。Webhook を管理する方法については、Webhook を管理するをご覧ください。

    Webhook を検出するには、Webhook ID が必要です。接続された各リポジトリの Webhook ID は、BitbucketServerConfig で確認できます。次のコマンドを入力して Webhook ID を取得します。ここで、CONFIG_NAME は Bitbucket Server 構成の名前です。

    gcloud alpha builds enterprise-config bitbucketserver describe --config=CONFIG_NAME
    
  6. [完了] をクリックします。必要に応じて [トリガーを作成する] をクリックして、トリガーを作成します。

gcloud

現在、gcloud サポートは、Bitbucket Server リポジトリへの接続には使用できません。

API

API を使用して Bitbucket Server リポジトリを Cloud Build に接続するには、次の JSON テンプレートを使用します。

  {
    "parent": "projects/PROJECT_NUMBER/locations/global/bitbucketServerConfigs/BITBUCKET_SERVER_CONFIG_NAME",
    "requests": {
      "parent": "projects/PROJECT_NUMBER/locations/global/bitbucketServerConfigs/BITBUCKET_SERVER_CONFIG_NAME",
      "bitbucketServerConnectedRepository": {
        "parent": "projects/PROJECT_NUMBER/locations/global/bitbucketServerConfigs/BITBUCKET_SERVER_CONFIG_NAME",
        "repo": {
           "projectKey": "PROJECT_KEY",
           "repoSlug": "REPO_SLUG"
         }
       }
    }
  }

ここで

  • PROJECT_NUMBER は Cloud プロジェクトのプロジェクト番号です。
  • BITBUCKET_SERVER_CONFIG_NAME は、Bitbucket Server 構成の名前です。
  • PROJECT_KEY は、Bitbucket Server プロジェクトのキーです。 個人用リポジトリを接続する場合、プロジェクト キーは、ユーザー名の前にチルダ(~)記号が含まれている必要があります。例: ~${USERNAME}ホスト リポジトリの完全な URL は、「https://${HOST_URI}/projects/~${USER_NAME}/repos/${REPO_SLUG}」のようになります。
  • REPO_SLUG は、Bitbucket Server リポジトリのスラッグです。

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

  curl -X POST -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/global/bitbucketServerConfigs/BITBUCKET_SERVER_CONFIG_NAME/connectedRepositories:batchCreate -d @requests.json

ここで

  • PROJECT_NUMBER は Cloud プロジェクト番号です。
  • PROJECT_ID は Cloud プロジェクト ID です。
  • BITBUCKET_SERVER_CONFIG_NAME は、Bitbucket Server 構成の名前です。

成功すると、レスポンスの本文には新しく作成された 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/global/operations/OPERATION_ID

ここで

  • PROJECT_NUMBER は Cloud プロジェクト番号です。
  • PROJECT_ID は Cloud プロジェクト ID です。
  • OPERATION_ID は、Bitbucket Server 構成作成オペレーションの ID です。

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

Bitbucket Server のトリガーの作成

Console

Google Cloud Console を使用して Bitbucket Server のトリガーを作成するには:

  1. [トリガー] ページを開く

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

  2. ページ上部でプロジェクトを選択し、[開く] をクリックします。

  3. [トリガーを作成] をクリックします。

  4. 次のトリガー設定を入力します。

    • 名前: トリガーの名前。

    • リージョン: トリガーのリージョンを選択します。

    • 説明(省略可): トリガーの説明。

    • イベント: トリガーを起動するリポジトリ イベントを選択します。

      • ブランチに push する: 特定のブランチに対して commit が行われたときにビルドを開始するトリガーを設定します。

      • 新しいタグを push する: 特定のタグを含む commit が行われたときにビルドを開始するトリガーを設定します。

      • pull リクエスト(Cloud Source Repositories はサポートされていません): pull リクエストの commit が行われたときにビルドを開始するトリガーを設定します。

    • ソース: Bitbucket Server トリガーの実行時にビルドするリポジトリを選択します。

    • リビジョン: Bitbucket Server トリガーの実行時にビルドするブランチまたはタグを選択します。

    • ブランチ: このブランチ上でビルドするトリガーを設定します。

    • タグ: このタグでビルドするトリガーを設定します。

    • 構成: リポジトリにあるビルド構成ファイルを選択するか、トリガーでビルドをインラインで構成します。

    • タイプ: ビルドに使用する構成のタイプを選択します。

      • Cloud Build 構成ファイル(yaml または json): 構成にビルド構成ファイルを使用します。
      • Dockerfile: 構成には Dockerfile を使用します。
    • 場所: 構成の場所を指定します。

      • リポジトリ: 構成ファイルがリポジトリにある場合は、ビルド構成ファイルまたは Dockerfile ディレクトリの場所と生成されたイメージの名前を指定します。構成が Dockerfile の場合は、必要に応じてビルドのタイムアウトを指定できます。Dockerfile とイメージ名を指定すると、ビルドが実行される docker build コマンドのプレビューが表示されます。

      • インライン: 構成オプションとして Cloud Build 構成ファイル(yaml または json)を選択した場合、インライン ビルド構成を指定できます。Google Cloud Console で [エディタを開く] をクリックして、YAML または JSON 構文でビルド構成ファイルを書き込みます。[完了] をクリックしてビルド構成ファイルを保存します。

  5. [作成] をクリックして Bitbucket Server トリガーを作成します。

gcloud

gcloud コマンドを使用して Bitbucket Server トリガーを作成するには、ターミナルで次の「gcloud alpha builds triggers create bitbucketserver」コマンドを実行する必要があります。

gcloud alpha builds triggers create bitbucketserver
    --name=TRIGGER_NAME \
    --project-key=PROJECT_KEY \
    --repo-slug=REPO_SLUG \
    --bitbucket-server-config-resource=projects/PROJECT_NUMBER/locations/global/bitbucketServerConfigs/ID \
    --branch-pattern=BRANCH_NAME \ # --tag-pattern=TAG_NAME
    --build-config=BUILD_CONFIG

ここで

  • TRIGGER_NAME はトリガーの名前です。
  • PROJECT_KEY は、Bitbucket Server プロジェクトのキーです。
  • REPO_SLUG は、Bitbucket Server リポジトリのスラッグです。
  • PROJECT_NUMBER は Cloud プロジェクトのプロジェクト番号です。
  • ID は、BitbucketServerConfig の ID です。
  • BRANCH_NAME は、特定のブランチをビルドするようにトリガーを設定する場合のブランチの正規表現です。
  • TAG_NAME は、特定のタグを作成するようにトリガーを設定する場合の正規表現です。
  • BUILD_CONFIG は、ビルド構成ファイルへのパスです。

API

API を使用して Bitbucket Server トリガーを作成するには、次の JSON テンプレートを使用します。

    {
      "filename": "cloudbuild.yaml",
      "name": "curl-trigger",
      "description": "curl trigger",
      "bitbucket_server_trigger_config": {
          "repo_slug": REPO_SLUG
          "project_key": PROJECT_KEY
          "push": {
             "branch": BRANCH_NAME # "tag": TAG_NAME
          }
     "bitbucket_server_config_resource": "projects/PROJECT_NUMBER/locations/global/bitbucketServerConfigs/ID"
      }
  }

ここで

  • PROJECT_KEY は、Bitbucket Server プロジェクトのキーです。
  • REPO_SLUG は、Bitbucket Server リポジトリのスラッグです。
  • PROJECT_NUMBER は Cloud プロジェクトのプロジェクト番号です。
  • ID は、BitbucketServerConfig の ID です。
  • BRANCH_NAME は、特定のブランチをビルドするようにトリガーを設定する場合のブランチの正規表現です。
  • TAG_NAME は、特定のタグを作成するようにトリガーを設定する場合の正規表現です。

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

curl -X POST -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/triggers -d @trigger.json

ここで

  • PROJECT_NUMBER は Cloud プロジェクト番号です。
  • PROJECT_ID は Cloud プロジェクト ID です。

Bitbucket サーバーからオンプレミス環境でリポジトリをビルド

このセクションでは、Bitbucket Server トリガーを使用して、Bitbucket Server インスタンスのプライベート プールにビルドする方法を説明します。

オンプレミス環境でビルドする Bitbucket Server トリガーを作成するには:

  1. オンプレミス ホスト用の限定公開の Google アクセスを有効にして、Bitbucket Server インスタンスが Google Cloud の API とサービスにアクセスできるようにします。

  2. オンプレミス ネットワークを Google Cloud にピアリングし、Virtual Private Cloud(VPC)ネットワークをセットアップします。詳細については、VPC ネットワークのピアリングをご覧ください。

  3. Bitbucket Server トリガーを作成して、Bitbucket Server インスタンスでホストされているリポジトリを作成します。

これで Bitbucket Server トリガーは、構成に基づいて Bitbucket Server インスタンス上でビルドを自動的に呼び出すようになりました。

次のステップ