プルリクエスト
プルリクエスト ビルド機能は、TeamCity を GitHub、 Bitbucket サーバー、 Bitbucket Cloud、 GitLab、 Azure DevOps、 JetBrains Space リポジトリ内のプル (マージ) リクエストと統合します。
共通情報
ビルド構成にプルリクエスト機能を追加すると、次のことが可能になります。
ビルド構成の概要ページで、プルリクエストブランチと保留中の変更を表示します。

概要 タブの ビルド結果ページでプルリクエストの詳細を表示します。

ドラフトプルリクエストの場合、アイコンはグレー表示になり、プルリクエスト番号の前に 下書き ステータスが表示されます:

監視するプルリクエストを、作成者、ターゲットブランチ、元ブランチでフィルターします。
開発者がローカルブランチで作業し、それらの変更がプル (マージ) リクエストとして送信された場合にのみ TeamCity がビルドするワークフローを設定します — 以下の VCS ルートとの連携 を参照してください。
プルリクエスト機能は、プル (マージ) リクエストブランチに対して新しいビルドを自動的にトリガーし しない。 プルリクエストブランチからの変更をメインコードベースにマージする前に評価するには、必要なブランチをターゲットにする VCS トリガーを追加します (たとえば、GitHub では refs/pull/N/head)。 TeamCity UI で作成された新しいビルド構成には、 +:* 仕様のトリガーがすでに含まれており、これにより TeamCity はプル (マージ) リクエストブランチからの変更をビルドできます。
プロジェクトが GitHub または GitLab リポジトリをターゲットにしている場合は、さらに進めて、TeamCity にプルリクエストブランチをビルドさせ、ビルドが成功したリクエストをマージさせることができます。 これを行うには、 Automatic Merge ビルド機能を プルリクエスト と一緒に追加します。
VCS ルートとの連携
プルリクエスト機能は、現在のビルド構成に添付されている VCS ルートの元のブランチ仕様を拡張します。 このため、あいまいで予期しない動作を避けるために、VCS ルート 不可 のブランチ仕様には、プルリクエストブランチに一致するパターンを含めないでください。
ビルド構成で のみ プルリクエストをビルドする必要がある場合は、親 VCS ルートのブランチ仕様をクリアします:
この VCS ルートが他の構成と共有されている場合は、代わりに構成の ブランチフィルターを使用して、プルリクエストブランチのみを使用可能にします:
以下のサンプルは、ルートブランチ仕様とプルリクエスト機能が互いに補完し合って次のワークフローを実装するように、TeamCity プロジェクトを設定する方法を示しています:
TeamCity は、
メイン、本番環境、サンドボックスブランチと、"release-" で始まるすべてのブランチ (たとえばリリース-2077.02) のみを追跡します。開発者は、TeamCity に公開することなくローカルブランチを作成して作業できます。
開発者が変更を公開する準備ができたら、個人用 (未追跡) ブランチからコア (追跡済み) ブランチへコミットをマージするリクエストを作成します。 これにより、新しいプルブランチが作成されます (たとえば、GitHub の
refs/pull/54)。 プルリクエスト機能はこの新しいブランチを検出し、マージされる前に TeamCity で変更をビルドしてテストできるようにします。機能の 作成者でフィルター 設定により、TeamCity は権限のない (外部) ユーザーによって作成された同様の
refs/pull/<整数>ブランチを無視します。
VCS 固有の設定
GitHub プルリクエスト
この機能は、 GitHub(英語) および GitHub エンタープライズ(英語)をサポートします。 refs/pull/*/head ブランチでのみビルドを監視します。
GitHub ホスティング型では次のパラメーターを使用できます。
- 認証タイプ
VCS ルート認証情報を使用する — VCS ルートが HTTP(S) フェッチ URL を使用している場合、TeamCity は VCS ルート設定からユーザー名/パスワード資格情報または個人アクセストークン/
x-oauth-basicを抽出しようとします。 VCS ルートが匿名認証または SSH を使用している場合、このオプションは機能しません。 GitHub Enterprise リポジトリの場合、個人アクセストークン/x-oauth-basicのペアのみが機能します。アクセストークン — GitHub への OAuth 接続が設定されている場合、魔法の杖ボタンをクリックすると、TeamCity が対応するアクセストークンを自動的に取得できます。

それ以外の場合、GitHub 側で手動で発行されたトークンを挿入する場合は、次の権限またはスコープがあることを確認してください。
クラシック GitHub トークン: パブリックリポジトリには
public_repo、プライベートリポジトリにはリポジトリ。 関連項目: OAuth アプリのスコープ。きめ細かいトークン: "Read-only" アクセスタイプで
プルリクエスト権限を追加します。 この権限は、「すべてのリポジトリ」または「選択したリポジトリのみ」のアクセスタイプを持つトークンにのみ追加できます。 参照: きめ細かな個人アクセストークンに必要な権限(英語)。
GitHub アプリのアクセストークン — GitHub アプリ経由で発行された、個人用ではない 有効期間の短いトークン。 VCS ルート 設定が、 GitHub アプリ接続を使用して構成された特定の VCS ルートを指している場合にのみ使用できます。
- 検出モード。
TeamCity がプルリクエストを識別する方法を決定します:
ブランチ仕様の参照による (デフォルト) — TeamCity は、実際の
refs/pull/N/headブランチによってプルリクエストを識別します。ソースブランチ名別 — リクエストはソースブランチによって識別されます。 モードを有効化すると、次の効果があります:
フォークからのプルリクエストは無視されます。
同じソースブランチからの異なるプルリクエストはひとつに集約され、同じビルド内で処理できます。
TeamCity UI では、ソースブランチ名が表示されます (デフォルトモードの
pull/N名と比較した場合)。副作用として、二つの構成が ビルドチェーンにリンクされている場合、TeamCity は別々のリポジトリに対して作成されたプルリクエストをより正確に同期します。 たとえば、デフォルトモードでは、上流構成が
pull/10ブランチからの変更を処理すると、下流ビルドは同じブランチに対して実行されます。 各リポジトリには固有のプルリクエストカウンターがあるため、このチェーンは無関係な変更をビルドする可能性があります。 ソースブランチ名別 モードが有効化されている場合、TeamCity は、どちらも同じサンドボックスブランチを元にしているため、あるリポジトリのpull/10ブランチからの変更が、別のリポジトリのpull/54ブランチに対応することを認識します。
このモードを切り替えると、TeamCity がプルリクエストを認識する方法が変わり、新しいプルリクエストが一時的に大量に発生する可能性があります (また、自動トリガーが構成されている場合は、キューに入ったビルドも大量に発生する可能性があります)。 これはビルド量の一時的な急増であり、新しく検出されたすべてのプルリクエストが処理されると解消されます。
- 作成者による
TeamCity が監視するプルリクエストを作成者でフィルターします。 パブリックリポジトリにのみ適用されます。
- ソース別ブランチ
監視対象のプルリクエストを、この ブランチフィルターに一致するソースブランチに制限します。 フィルターを適用しない場合は空のままにします。
- ターゲットブランチ
監視対象のプルリクエストを、この ブランチフィルターに一致するターゲットブランチに制限します。 フィルターを適用しない場合は空のままにします。
- 下書きを無視
デフォルトでは、プルリクエストビルド機能は GitHub ドラフトプルリクエスト情報を読み込み、それらに対してビルドを実行します — ビルドページには、グレー表示のアイコンと 下書き ステータスがプルリクエスト番号の横に表示されます。
GitHub ドラフトプルリクエストを無視するには、このボックスをオンにします。 TeamCity は、ステータスが変更されるまでドラフトプルリクエスト情報を読み込みません。
- サーバー URL
接続用の GitHub URL。 空のままにすると、URL は VCS ルートフェッチ URL から抽出されます。
Bitbucket サーバー / データセンターのプルリクエスト
Bitbucket サーバー / データセンター(英語)ホスティング型では、次のパラメーターを使用できます。
- 認証タイプ
VCS ルート認証情報を使用する — VCS ルートが HTTP(S) フェッチ URL を使用している場合、TeamCity は VCS ルート設定からユーザー名/パスワード資格情報を抽出しようとします。 VCS ルートが SSH フェッチ URL を使用している場合、または匿名認証を使用している場合、このオプションは機能しません。
ユーザー名パスワード — Bitbucket サーバー/Data Center への接続用のユーザー名とパスワードを指定します。 パスワードの代わりにアクセストークンを送信できます。トークンには、プロジェクトとリポジトリに対する 読み取り権限が必要です。
リフレッシュ可能なアクセストークンは、既存の OAuth 接続を介して必要な VCS プロバイダーから TeamCity が取得する有効期間の短いトークンです (VCS ホスティング側でユーザーが手動で発行する静的 PAT トークンとは異なります)。 リフレッシュ可能なトークンの生成と使用の詳細については、次の記事を参照してください: 更新可能なアクセストークンを管理する。
- ソース別ブランチ
監視対象のプルリクエストを、この ブランチフィルターに一致するソースブランチに制限します。 フィルターを適用しない場合は空のままにします。
- ターゲットブランチ
監視対象のプルリクエストを、この ブランチフィルターに一致するターゲットブランチに制限します。 フィルターを適用しない場合は空のままにします。
- サーバー URL
接続用の Bitbucket URL。 空のままにすると、URL は VCS ルートフェッチ URL から抽出されます。
- プルリクエストブランチを使用
後方互換性のみを目的としています。 ソースブランチではなく、 公式にサポートされていない Bitbucket プルリクエストブランチ (
pull-requests/*) の検出を有効化します。注意: 切り替え後、直近の一時間以内にコミットされた変更に対して新しいビルドがトリガーされる可能性があります。
Bitbucket Cloud プルリクエスト
Bitbucket Cloud はプルリクエスト専用のブランチを作成しないため、このビルド機能はソースリポジトリ内のソースブランチを直接監視します (フォークはサポートされていません)。 ビルド開始時点で同じソースブランチから複数のプルリクエストが送信されている場合、TeamCity はそれらすべてのリクエストをビルド結果に表示します。 ただし、フィルター条件に一致するオープンなプルリクエストのコミットのみが、ビルドの 変更として表示されます。
VCS ルートのブランチ仕様には、プルリクエストブランチに一致するパターンを 不可 含むことに注意してください。
Bitbucket クラウド(英語)ホスティング型では、次のパラメーターを使用できます。
- 認証タイプ
VCS ルート認証情報を使用する — VCS ルートが HTTP(S) フェッチ URL を使用している場合、TeamCity は VCS ルート設定からユーザー名/パスワード資格情報を抽出しようとします。 VCS ルートが SSH フェッチ URL を使用している場合、または匿名認証を使用している場合、このオプションは機能しません。
ユーザー名パスワード — Bitbucket Cloud への接続用のユーザー名とパスワードを指定します。 プルリクエスト | 読み取りスコープでは アプリパスワード(英語)を使用することをお勧めします。
リフレッシュ可能なアクセストークンは、既存の OAuth 接続を介して必要な VCS プロバイダーから TeamCity が取得する有効期間の短いトークンです (VCS ホスティング側でユーザーが手動で発行する静的 PAT トークンとは異なります)。 リフレッシュ可能なトークンの生成と使用の詳細については、次の記事を参照してください: 更新可能なアクセストークンを管理する。
永続アクセストークン — リポジトリ、ワークスペース、またはプロジェクトへの長期アクセス用に、Bitbucket Repository Access Token、 Project Access Token 、または Workspace Access Token を入力します。 トークンには プルリクエスト | 読み取り スコープが必要です。
- ターゲットブランチ
監視対象のプルリクエストを、この ブランチフィルターに一致するブランチに制限します。 フィルターを適用しない場合は空のままにします。
GitLab マージリクエスト
TeamCity は、他のホスティングサービスでプルリクエストを処理する方法と同様に、GitLab マージリクエストを処理します。 現在、TeamCity は、このビルド機能が有効化された後に送信されたマージリクエストのみを検出します。
この機能は、 refs/merge-requests/*/head ブランチでのみビルドを監視します。
GitLab(英語) ホスティング型では、次のパラメーターを使用できます。
- 認証タイプ
VCS ルート認証情報を使用する — VCS ルートが HTTP(S) フェッチ URL を使用している場合、TeamCity は VCS ルート設定からログイン資格情報またはアクセストークンを抽出しようとします。 VCS ルートが匿名認証を使用している場合、このオプションは機能しません。
個人アクセストークン — GitLab で発行された個人アクセストークンを使用します。
APIスコープが必要です。リフレッシュ可能なアクセストークンは、既存の OAuth 接続を介して必要な VCS プロバイダーから TeamCity が取得する有効期間の短いトークンです (VCS ホスティング側でユーザーが手動で発行する静的 PAT トークンとは異なります)。 リフレッシュ可能なトークンの生成と使用の詳細については、次の記事を参照してください: 更新可能なアクセストークンを管理する。
- ソース別ブランチ
監視対象のマージリクエストを、この ブランチフィルターに一致するソースブランチに制限します。 フィルターを適用しない場合は空のままにします。
- ターゲットブランチ
監視対象のマージリクエストを、この ブランチフィルターに一致するターゲットブランチに制限します。 フィルターを適用しない場合は空のままにします。
- 下書きを無視
デフォルトでは、プルリクエストビルド機能は GitLab ドラフトマージリクエスト情報を読み込み、それらに対してビルドを実行します — ビルドページには、グレー表示のアイコンと 下書き ステータスがマージリクエスト番号の横に表示されます。
GitLab ドラフトマージリクエストを無視するには、ボックスをオンにします。 TeamCity はドラフトマージリクエスト情報を読み込まず、ステータスが非ドラフトに変わるまでマージリクエストは無視されます。
- サーバー URL
接続用の GitLab URL。 空のままにすると、URL は VCS ルートフェッチ URL から抽出されます。
Azure DevOps プルリクエスト
この機能は、 refs/pull/*/merge ブランチでのみビルドを監視します。
Azure DevOps では、TeamCity は他の VCS のようにプルリクエスト自体ではなく、マージブランチ上でリクエストを検出します。 各ビルドは、プルリクエストをマージした後のビルドの実際の結果を示す仮想ブランチ上で起動されるため、ビルドには変更を含むコミットと仮想マージコミットの両方が含まれます。
この機能は Azure DevOps ドラフトプルリクエストを無視することに注意してください。
- 認証タイプ
個人アクセストークン — Azure DevOps アカウント設定で発行(英語)できる静的トークン。 発行されたトークンには、プルリクエストが必要な情報を取得できるように
コード (読み取り)スコープが必要です。リフレッシュ可能なアクセストークンは、既存の OAuth 接続を介して必要な VCS プロバイダーから TeamCity が取得する有効期間の短いトークンです (VCS ホスティング側でユーザーが手動で発行する静的 PAT トークンとは異なります)。 リフレッシュ可能なトークンの生成と使用の詳細については、次の記事を参照してください: 更新可能なアクセストークンを管理する。
- ソース別ブランチ
監視対象のプルリクエストを、この ブランチフィルターに一致するソースブランチに制限します。 フィルターを適用しない場合は空のままにします。
- ターゲットブランチ
監視対象のプルリクエストを、この ブランチフィルターに一致するターゲットブランチに制限します。 フィルターを適用しない場合は空のままにします。
- プロジェクト URL
リモート Azure DevOps サーバーとの同期用のプロジェクト URL。 オンプレミスの Azure DevOps インストールに推奨されます。 空のままにすると、URL は VCS ルートフェッチ URL に基づいて構成されます。
JetBrains Space マージリクエスト
この機能は、元リポジトリのソースブランチ内のマージリクエストを直接監視します。 同じソースブランチから複数のマージリクエストが送信された場合、TeamCity はそれらすべてのリクエストをビルド結果に表示します。 ただし、フィルター条件に一致するオープンなリクエストのコミットのみが、ビルドの 変更として表示されます。
JetBrains Space ホスティング型では、次のパラメーターを使用できます。
- 接続
JetBrains Space への事前構成された接続を選択します。
- ターゲットブランチ
監視対象のマージリクエストを、この ブランチフィルターに一致するブランチに制限します。 フィルターを適用しない場合は空のままにします。
複数の並列ビルドを実行して、リクエストをマージする前に事前テストする場合、最善の解決策は次のとおりです。
テストを含む並列ビルドで スナップショット依存関係を構成して、ビルドチェーンの最後に複合ビルド構成を追加します。
すべてのビルドがマージリクエストブランチの変更を検出できるように、チェーンの各ビルド構成に プルリクエスト機能を追加します。 すべての設定を ビルド構成テンプレートで事前に構成し、それに基づいてこれらのビルド構成を作成できます。
複合ビルド構成設定の場合:
VCS トリガーを追加して、マージ要求ブランチで検出された変更に基づいてビルドを自動的に実行します。
ビルドステータスを JetBrains Space のコミット詳細に送信するには、 Commit Status Publisher 機能を追加します。 チェーン内の他のビルドでも JetBrains Space にステータスを報告させたい場合 (たとえば、 デプロイビルドや 統合テストビルド)、対応するビルド構成に コミットステータスパブリッシャー 機能を追加します。
その後、TeamCity は JetBrains Space リポジトリに送信されたマージリクエストブランチの変更に対してビルドを自動的に実行し、ビルドステータスを Space のマージリクエストタイムラインに公開します:

JetBrains Space ブランチを未検証のマージリクエストから保護するために、リポジトリ設定で 品質ゲートを構成することもできます。 TeamCity ビルドを外部チェックとして設定した場合、JetBrains Space は、このリクエストのマージを許可する前に、マージリクエスト上のビルドが正常に完了することを要求します。
JetBrains Space マージリクエストの処理に関する既知の問題については、 こちらを参照してください。
プルリクエスト用の定義済みビルドパラメーター
TeamCity は、有益なプルリクエスト情報を公開する複数の 定義済みビルドパラメーターを、プルリクエスト 機能が有効化されているビルド向けに提供します:
これらのパラメーターは、ビルド構成の設定またはビルドスクリプトで使用できます。
プルリクエストのワークフロー例
次の環境がセットアップされているとします。
パブリック GitHub リポジトリ
ウェブアプリとデフォルトのブランチマスターTeamCity プロジェクト。
ウェブアプリリポジトリからのファイルを使用して Web アプリケーションをビルドする構成ウェブアプリをビルドします。
組織のメンバーは、 マスター ブランチにプルリクエストを送信してソースへの変更を提案します。これらの変更をマージする前に、TeamCity で自動的にビルドしてテストしたいとします。 TeamCity は、 マスター ブランチに送信された各プルリクエストを検出し、更新されたソースに基づいて Web アプリケーションをビルドできます。
TeamCity で ウェブアプリ ビルド構成にこのワークフローを構成するには:
ビルド構成に VCS ルートを追加します。
構成設定を開き、 バージョン管理設定 設定タブに移動します。
VCS ルートを接続 をクリックします。
ルートパラメーターを設定します。
VCS のタイプ: Git
VCS ルートのお名前: \<一意のルート名\>
フェッチ URL: \<GitHub_リポジトリ_URL\>
デフォルトブランチ: 監視対象のブランチ。デフォルトでは、
refs/heads/マスター(続きを読む: 機能ブランチについて)ブランチ仕様: 追加のブランチを監視するためのフィルター (たとえば、
+:refs/heads/*)ウェブアプリリポジトリへのアクセス権を持つ GitHub ユーザーの 認証設定
接続をテストし、成功したら 作成 をクリックします。
ビルド構成に プルリクエスト ビルド機能を追加します。
構成設定 を開き、 ビルド機能 設定タブに移動します。
ビルド機能を追加 をクリックします。
関数型パラメーターを構成します。
VCS ルート: ステップ 1 で作成された VCS ルート
VCS ホスティングタイプ: GitHub
認証タイプ: VCS ルート認証情報を使用する 、または アクセストークンを選択して、代わりに GitHub トークンを使用します
プルリクエストフィルター は:
作成者による: 同じ組織のメンバー
ターゲットブランチ: 空のままにして、フィルターを適用せず、リポジトリ内のすべての新しいプル要求をモニターするか、ターゲットブランチを明示的に指定します (この例では、
マスター)
接続をテストし、成功したら 保存 をクリックします。
ビルド構成に VCS トリガーを追加します。
この統合が設定されている場合、GitHub 組織のメンバーが マスター ブランチにプルリクエストを送信するたびに、TeamCity は次の処理を実行します:
マスターブランチに送信されたプル要求を検出します。ウェブアプリビルド構成を実行します: ソースを収集し、事前定義済みのビルドステップに従ってアプリをビルドおよびテストします。ビルド構成 概要 ページで処理されたプル要求に関する情報を表示します。 プルリクエストのステータスをすぐに確認でき(1)、そのステータスに関する情報をリフレッシュできます(2)。

Pro ヒント
セットアップをさらに自動化できるため、TeamCity は次のことを行えます:
コミットステータスパブリッシャービルド機能を使用して、ビルド完了後にビルドステータスを GitHub に送り返します。
ビルドが正常に完了した場合、 自動マージビルド機能を使用して GitHub のプルリクエストをマージします。
プルリクエストに基づいて チェーンのビルド全体を実行する場合は、チェーンの各ビルド構成にプルリクエスト機能を追加することを忘れないでください。 これを簡単にするには、すべてを ビルド構成テンプレートで設定し、それに基づいてこれらのビルド構成を作成できます。
トラブルシューティング
TeamCity は、プルリクエストビルド機能に関連する イベントを書き込みます 。書き込み先は teamcity-プルリクエスト.ログ ファイルです。 このログに DEBUG レベルのイベントを含めるには、"debug-pull-requests" プリセットを適用します。