継続的インテグレーション パフォーマンスのために Bitbucket Server を拡張する
CI またはその他の自動ツールが変更について Bitbucket Server をポーリングするように設定されている場合、Bitbucket Server インスタンスに大きな負荷がかかる場合があります。たとえば、特定のリポジトリ用にセットアップされたビルドが多数ある CI サーバーを考えます。それぞれのビルドは、変更について Bitbucket Server をポーリングし、変更が検出されると新しいビルドを開始します。CI サーバーが並列および / または連鎖ビルド ステップをサポートしている場合、それぞれのビルドは通常、複数のクローン操作を同じリポジトリで実行します。その結果、変更に関するポーリングが多数発生し、リポジトリのクローンが激増します。
キャッシング
CI によって、Bitbucket Server への呼び出しが何度も繰り返されます。変更に関するポーリングでは通常、90 % の割合で同じレスポンスが得られ、ビルドによって Bitbucket Server に対する同一のクローン呼び出しが多数トリガーされます。CI からの反復的な負荷が発生した場合、いずれの操作もキャッシュの恩恵を大きく受けることができます。
On this page:
制限事項
- キャッシュは "ref advertisement" (変更のポーリング)、クローン、およびシャロー クローン リクエストにのみ適用できます。フェッチ / プル操作はキャッシュされませんが、これらの操作は "ref advertisement" キャッシュの恩恵を受けます。
ref advertisement キャッシュは既定で無効化されています。プラグイン システムの開放性は、プラグイン (または手動でインストールされた git フック) が、変更を検出するキャッシュ プラグインなしでリポジトリ内の refs を更新できることを意味します。その結果、refs キャッシュが古くなり、クローン / フェッチ操作が失敗します。ただし、リポジトリを直接変更するプラグインまたは git フックがインストールされていないことがわかっている場合、以下の [設定] セクションに記載されているシステム プロパティを使用して、ref advertisement キャッシュを有効化できます。追加の予防策として、ref advertisement キャッシュは 3 分後に自動的に失効されるように設定されていることにご注意ください。
- Git 2.18 では、Bitbucket Server のキャッシュで完全にサポートされる Git ワイヤ プロトコルのバージョン 2 が導入されました。プロトコルの差異のため、バージョン 1 のワイヤ プロトコルを使用する Git クライアントは、バージョン 2 のワイヤ プロトコルを使用するクライアント用に生成されたキャッシュを使用できない点にご注意ください。逆もまた同様です。その結果、バージョン 1 と 2 のワイヤ プロトコルを使用するクライアントが混在している場合、すべてのクライアントが同じバージョンのワイヤ プロトコルを使用している場合と比較すると、キャッシュのためのディスク使用率が高くなり、キャッシュ効率が低下する可能性があります。
考慮事項
ref advertisements 操作の場合もクローン操作の場合も、キャッシュ データはディスクに保存されます。保存期間は設定できます。大きなインスタンスはディスク全体を潜在的に消費する可能性があるため、SCM Cache Plugin は残りのディスク容量を監視し、設定された最低ディスク空き容量に達すると自動的に無効化されます。
利用可能なシステム プロパティの詳細については、「Bitbucket Server の設定プロパティ」を参照してください。
構成
REST エンドポイント (すべてではなく一部の設定) または <BITBUCKET_HOME>/bitbucket.properties
でシステム プロパティを使用して、Bitbucket Server の SCM Cache Plugin を設定できます。REST で構成された設定は、 bitbucket.properties
での設定より手前のものとみなされます。
REST API
メソッド | URL | 説明 |
---|---|---|
GET | /rest/scm-cache/latest/config/protocols | キャッシュが有効化されているプロトコルを取得します。 |
PUT | /rest/scm-cache/latest/config/protocols/{protocol} | プロトコル (HTTP または SSH) のホスティング リクエストのキャッシングを有効化します。 |
削除 | /rest/scm-cache/latest/config/protocols/{protocol} | プロトコル (HTTP または SSH) のホスティング リクエストのキャッシングを無効化します。 |
GET | /rest/scm-cache/latest/config/refs/enabled | ref advertisement キャッシュが有効化されているか (true) 無効化されているか (false) を取得します。 |
PUT | /rest/scm-cache/latest/config/refs/enabled/{status} | ref advertisement キャッシュを有効化 (status = true) または無効化 (status = false) します。 |
GET | /rest/scm-cache/latest/config/refs/ttl | ref advertisement キャッシュの有効期限を秒単位で取得します。 |
PUT | /rest/scm-cache/latest/config/refs/ttl/{expiryInSec} | ref advertisement キャッシュの有効期限を秒単位で設定します。 |
GET | /rest/scm-cache/latest/config/upload-pack/enabled | クローン キャッシュが有効化されているか (true) 無効化されているか (false) を取得します。 |
PUT | /rest/scm-cache/latest/config/upload-pack/enabled/{status} | クローン キャッシュを有効化 (status = true) または無効化 (status = false) します。 |
GET | /rest/scm-cache/latest/config/upload-pack/ttl | クローン キャッシュの有効期限を秒単位で取得します。 |
PUT | /rest/scm-cache/latest/config/upload-pack/ttl/{expiryInSec} | クローン キャッシュの有効期限を秒単位で設定します。 |
GET | /rest/scm-cache/latest/caches | 現在のキャッシュに関する情報 (サイズ、キャッシュのヒット数、ミス数など) を取得します。 |
削除 | /rest/scm-cache/latest/caches | すべてのキャッシュをクリアします。 |
GET | /rest/scm-cache/latest/caches/{projectKey}/{repoSlug} | projectKey および repoSlug で識別されるリポジトリのキャッシュに関する情報 (サイズ、キャッシュのヒット数、ミス数など) を取得します。 |
削除 | /rest/scm-cache/latest/caches/{projectKey}/{repoSlug} | projectKey および repoSlug で識別されるリポジトリのキャッシュをクリアします。 |