共有リソース
共有リソース ビルド機能を使用すると、外部 (CI サーバー) リソース たとえば、テストデータベースや接続数が制限されたサーバーなどなどの共有リソースを使用して、同時に実行されるビルドを制限できます。
そのようなリソースの中には、同時にアクセスできるものの接続数が限られているものもあれば、排他的アクセスが必要なものもあります。 共有リソースに異なるロックを追加することで、こうしたケースに対応できます: プロジェクトレベルでリソースを定義し、そのパラメーター (タイプやクォータなど) を構成してから、対象のビルド構成に共有リソースビルド機能を追加することで、そのリソースを使用できます。 リソースのロックが取得されるとビルドが開始され、ビルドの完了時にロックが解放されます。 リソースを使用しているビルドが 実行中 の間、リソースは使用できず、ロックを必要とする他のビルドは キュー で待機します。
共有リソースの追加と編集
プロジェクト構成ページの 共有リソース タブで、共有リソースの追加、編集、詳細(リソースの起源、使用方法など)を調べることができます。
リソース名には、英数字とアンダースコア(_ )(最大 80 文字)のみを含めることができ、ラテン文字で始める必要があります。
プロジェクトレベルで定義された共有リソースは、そのすべてのサブプロジェクトとビルド構成で使用できます。
サブプロジェクトレベルでは、プロジェクトから継承されたリソースを編集できません。
ただし、サブプロジェクトで同じ名前かつ異なる設定のリソースを作成することで、プロジェクトから継承されたリソースを再定義できます。 例:
プロジェクトの親に無限のクォータでリソース A を作成します。
そのサブプロジェクト Child 1 に移動し、クォータ 5 のリソース A (Parent のリソースと同じ名前) を作成します。
TeamCity は、このリソースをサブプロジェクト Child 1 で再定義されたものとして扱います。つまり、プロジェクトレベルで定義されたリソース A の設定 (無制限クォータ) は、リソース A のクォータが 5 になるサブプロジェクト Child 1 を除く、すべてのサブプロジェクトに伝播されます。
リソースの使用状況は、現在のプロジェクトのサブツリーをスキャンして計算されます。そのため、複数のプロジェクトが同じリソースを使用している場合、現在のプロジェクト内の使用状況のみがカウントされます。
共有リソースの種類
新しいリソースを追加する をクリックすると、3 種類のリソースが利用可能です。
無限のリソースは、無制限の読み取りロックを持つ共有リソースです。
クォータ付きのリソース: 割り当て量は、リソースで獲得できる読み取りロックの最大数です。
カスタム値を持つリソース: カスタム値(URL など)が、そのようなリソースに対するロックを取得したビルドに渡されます。
ビルド構成での共有リソースの使用
どのビルド構成でリソースを使用するかを定義するには、ビルド構成設定に「リソースの共有」 ビルド機能を追加します。
共有リソースを追加する場合、このビルド構成で使用可能なリソースを選択して、ロックを定義します。
以下のロックが利用可能です。
クォータ付きリソースのロック
このリソースタイプでは、2 種類のロックがサポートされています。
読み取りロック: 共有(読み取りロックを伴う複数の実行中ビルドが許可されています)。
書き込みロック: 排他的(書き込みロックを持つ単一の実行中ビルドのみが許可されています)。
クォータ付きのリソースでは、読み取りのために複数のビルドからの同時アクセスを許可しますが、リソースへの書き込みでは 1 つのビルドからのアクセスに制限します。 すべての読み取りロックが解放されるまで、書き込みロックを必要とするビルドは開始されず、新しい読み取り側がロックを取得できる間もキューで待機します。
リソースクォータが 0 に設定されたビルドは実行されません。
ロックの公平性
読み取りロックは、クォータが 1 より大きい共有リソースに複数のビルドが同時にアクセスすることを可能にしますが、ロックの公平性はビルドキューが侵害されないことを保証します。 つまり、クォータが > 1 の共有リソースがあり、読み取りロックを持つ複数のビルドと、読み取り側の間に書き込みロックを持つビルドがキューに入っている場合、書き込みロックを持つビルドは、読み取りロックを持つキュー内のすべてのビルド 以前 が完了してロックを解放するまで待機します。 その後、書き込みロックを必要とするビルドが実行され、その後に初めて他の読み取り者がロックを取得できます。 ロックの公平性により、読み取りロックを持つビルドがビルドキューの順序を妨害し、書き込みロックが利用可能になるのを待っているビルドを「すり抜けて」実行されることを防ぎます。
カスタム値付きリソースのロック
カスタム値を持つリソースは、3 種類のロックをサポートします。
使用可能な任意の値 に対するロック: リソースを使用するビルドは、値のいずれかが利用可能な場合に開始されます。 現在すべての値が使用されている場合、ビルドはキューで待機します。
すべて の値をロック: ビルドはリソースのすべての値をロックします。 現在のビルドが終了するまで、このリソースを使用する他のビルドは開始されません。
特定 の値のロック: リソースの特定の値のみがビルドに渡されます。 実行中のビルドで値がすでに取得されている場合、新しいビルドは値が使用可能になるまで キューで待機します。
定義された各ロックは、構成パラメーター teamcity.locks.読み取りロック.<ロック名> または teamcity.locks.書き込みロック.<ロック名> を使用してビルド内で表され、その値はリソース文字列です。 パラメーター名の例: teamcity.locks.読み取りロック.データベース URL
複合ビルドでのリソースのロック
共有リソース (カスタム値を持つものを除く) は、複合ビルドでもロックできるようになりました。 指定されたリソースのロックは、複合ビルドが開始されると (複合ビルドチェーンの最初のビルドが開始されると) 取得され、複合ビルドが終了すると (チェーン内の最後のビルドが完了すると) 解放されます。
コンポジットビルドで取得されたロックはこれらのコンポジットビルドにのみ影響し、個々のパーツには伝達されません。 例: リソースの割り当て量が N の場合、このリソースに対して読み取りロックが設定されている N 個のコンポジットビルドを同時に実行できます。 これらのコンポジットビルド内の同時個別ビルドの数は、リソースクォータの影響を受けません。
共有リソースの使用状況の表示
ビルド構成で少なくとも 1 つのリソースロックが定義されている場合、 ビルド結果 ページの 共有リソース タブでビルドで使用されるリソースを表示できます。 このタブには、各リソースのビルドで使用されるロックを含む、リソースとそのタイプが表示されます。
リソース名をクリックすると、プロジェクトレベルの 共有リソース構成ページに戻ります。