注: リポジトリ キャッシュは現在ベータ版であり、変更される可能性があります。
リポジトリ キャッシュの構成について
リポジトリ キャッシュと呼ばれる特殊な種類のレプリカを作成することで、リポジトリ キャッシュを構成できます。次に、リポジトリ キャッシュにレプリケートされるリポジトリ ネットワークを管理するデータの場所ポリシーを設定できます。
クラスタリングでは、リポジトリ キャッシュはサポートされていません。
リポジトリ キャッシュの DNS
プライマリ インスタンスとリポジトリ キャッシュの DNS 名は異なっている必要があります。 たとえば、プライマリ インスタンスが github.example.com
にある場合は、キャッシュ名は europe-ci.github.example.com
や github.asia.example.com
に決定できます。
CI マシンで、プライマリ インスタンスではなくリポジトリ キャッシュからフェッチするには、Git の url.<base>.insteadOf
構成設定を使用できます。 詳細については、Git ドキュメントにある「git-config
」を参照してください。
たとえば、CI マシンのグローバル .gitconfig
には、次の行が含まれます。
[url "https://europe-ci.github.example.com/"]
insteadOf = https://github.example.com/
次に、https://github.example.com/myorg/myrepo
をフェッチするように Git に要求すると、代わりに https://europe-ci.github.example.com/myorg/myrepo
からフェッチされます。
リポジトリ キャッシュの構成
-
新しい GitHub Enterprise Server インスタンスを希望するプラットフォームにセットアップします。 このインスタンスがリポジトリ キャッシュになります。 詳しくは、「GitHub Enterprise Server インスタンスをセットアップする」を参照してください。
-
プライマリアプライアンス上のパスワードと一致する管理者パスワードを設定して続行します。
-
[レプリカとして構成] をクリックします。
-
"Add new SSH key(新しいSSH鍵の追加)"の下でSSH鍵を入力してください。
-
[キーの追加] をクリックします。
-
SSH を使用して、リポジトリ キャッシュの IP アドレスに接続します。
$ ssh -p 122 admin@REPLICA-IP
-
レプリケーション用のキーの組を生成するには、プライマリ アプライアンスの IP アドレスを指定して
ghe-repl-setup
コマンドを使用し、それが返す公開キーをコピーします。
1. プライマリ アプライアンスの承認されたキーのリストに公開キーを追加するには、`https://PRIMARY-HOSTNAME/setup/settings` を参照して、レプリカからコピーしたキーをリストに追加します。$ ghe-repl-setup PRIMARY_IP
-
プライマリへの接続を確認し、リポジトリ キャッシュに対してレプリカ モードを有効にするには、
ghe-repl-setup
をもう一度実行します。$ ghe-repl-setup PRIMARY-IP
-
CACHE-LOCATION を、キャッシュがデプロイされているリージョンなどの英数字識別子に置き換えて、リポジトリ キャッシュに対して
cache-location
を設定します。 また、このキャッシュのデータセンター名も設定します。新しいキャッシュでは、同じデータセンター内の別のキャッシュからシード処理を試みます。$ ghe-repl-node --cache CACHE-LOCATION --datacenter REPLICA-DC-NAME
-
データ ストアのレプリケーションを開始するには、
ghe-repl-start
コマンドを使います。$ ghe-repl-start
警告:
ghe-repl-start
を実行すると、プライマリ サーバーを短時間使えなくなり、その間、ユーザーには内部サーバー エラーが表示されることがあります。 もっとわかりやすいメッセージを表示するには、ghe-repl-start
をレプリカ ノードで実行する前にプライマリ ノード上でghe-maintenance -s
を実行し、アプライアンスをメンテナンス モードにします。 レプリケーションを開始したら、ghe-maintenance -u
を使ってメンテナンス モードを無効にします。 プライマリ ノードがメンテナンス モードの間、Git レプリケーションは進行しません。$ ghe-repl-status
-
リポジトリ キャッシュへのリポジトリ ネットワークのレプリケーションを有効にするには、データの場所ポリシーを設定します。 詳細については、「データの場所ポリシー」を参照してください。
データの場所ポリシー
spokesctl cache-policy
コマンドでリポジトリのデータの場所ポリシーを構成して、データの局所性を制御できます。 データの場所ポリシーによって、どのリポジトリ ネットワークがどのリポジトリ キャッシュにレプリケートされているかが決まります。 既定では、データの場所ポリシーが構成されるまで、どのリポジトリ キャッシュにもリポジトリ ネットワークはレプリケートされません。
データの場所ポリシーは、Git コンテンツにのみ影響します。 Issue や pull request コメントなどのデータベース内のコンテンツは、ポリシーに関係なくすべてのノードにレプリケートされます。
注: データの場所ポリシーは、アクセス制御と同じではありません。 リポジトリにアクセスできるユーザーを制御するには、リポジトリ ロールを使用する必要があります。 リポジトリ ロールの詳細については、「Organizationのリポジトリロール」を参照してください。
--default
フラグを使用して、すべてのネットワークをレプリケートするようにポリシーを構成できます。 たとえば、次のコマンドでは、すべてのリポジトリ ネットワークの 1 つのコピーを、cache_location
が "kansas" であるリポジトリ キャッシュのセットにレプリケートするポリシーが作成されます。
$ ghe-spokesctl cache-policy set --default 1 kansas
リポジトリ ネットワークのレプリケーションを構成するには、ネットワークのルートであるリポジトリを指定します。 リポジトリ ネットワークには、リポジトリとリポジトリのすべてのフォークが含まれます。 ネットワーク全体をレプリケートしないと、ネットワークの一部をレプリケートすることはできません。
$ ghe-spokesctl cache-policy set <owner/repository> 1 kansas
ネットワークのレプリカ数を 0 に指定すると、すべてのネットワークをレプリケートし、特定のネットワークを除外するポリシーをオーバーライドできます。 たとえば、次のコマンドでは、場所 "kansas" 内のリポジトリ キャッシュに、そのネットワークのコピーを含めることができないことが指定されます。
$ ghe-spokesctl cache-policy set <owner/repository> 0 kansas
特定のキャッシュの場所で、1 より大きいレプリカ数はサポートされていません。