Note: Repository caching is currently in beta and subject to change.
About configuration for repository caching
You can configure repository caching by creating a special type of replica called a repository cache. Then, you can set data location policies that govern which repository networks are replicated to the repository cache.
Repository caching is not supported with clustering.
DNS for repository caches
The primary instance and repository cache should have different DNS names. For example, if your primary instance is at github.example.com
, you might decide to name a cache europe-ci.github.example.com
or github.asia.example.com
.
To have your CI machines fetch from the repository cache instead of the primary instance, you can use Git's url.<base>.insteadOf
configuration setting. For more information, see git-config
in the Git documentation.
For example, the global .gitconfig
for the CI machine would include these lines.
[url "https://europe-ci.github.example.com/"]
insteadOf = https://github.example.com/
Then, when told to fetch https://github.example.com/myorg/myrepo
, Git will instead fetch from https://europe-ci.github.example.com/myorg/myrepo
.
Configuring a repository cache
-
On your primary GitHub Enterprise Server appliance, enable the feature flag for repository caching.
$ ghe-config cluster.cache-enabled true
-
新しい GitHub Enterprise Server アプライアンスを希望するプラットフォームにセットアップします。 This appliance will be your repository cache. 詳細は「GitHub Enterprise Serverインスタンスをセットアップする」を参照してください。
-
プライマリアプライアンス上のパスワードと一致する管理者パスワードを設定して続行します。
-
Configure as Replica(レプリカとして設定)をクリックしてください。
-
"Add new SSH key(新しいSSH鍵の追加)"の下でSSH鍵を入力してください。
-
Add key(キーの追加)をクリックしてください。
-
Connect to the repository cache's IP address using SSH.
$ ssh -p 122 admin@REPLICA IP
-
On your cache replica, enable the feature flag for repository caching.
$ ghe-config cluster.cache-enabled true
-
レプリケーション用の鍵ペアを生成するには、プライマリアプライアンスの IP アドレスを指定した
ghe-repl-setup
コマンドを使用し、そのコマンドが返す公開鍵をコピーします。$ ghe-repl-setup PRIMARY IP
-
プライマリアプライアンスの認証済みキーのリストに公開鍵を追加するには、
https://<PRIMARY-HOSTNAME>/setup/settings
にアクセスし、レプリカからコピーした鍵をリストに追加してください。 -
To verify the connection to the primary and enable replica mode for the repository cache, run
ghe-repl-setup
again.$ ghe-repl-setup PRIMARY IP
-
Set a
cache_location
for the repository cache, replacing CACHE-LOCATION with an alphanumeric identifier, such as the region where the cache is deployed.$ ghe-repl-node --cache CACHE-LOCATION
-
データストアのレプリケーションを開始するには、
ghe-repl-start
コマンドを使ってください。$ ghe-repl-start
警告:
ghe-repl-start
を使うとプライマリサーバーは短期間利用できなくなり、その間ユーザにはinternal server errorが返されます。 もっと親切なメッセージを提供するには、ghe-repl-start
をレプリカノードで実行する前にプライマリノード上でghe-maintenance -s
を実行し、アプライアンスをメンテナンスモードにしてください。 レプリケーションを開始したら、ghe-maintenance -u
でメンテナンスモードを無効化してください。 Git replication will not progress while the primary node is in maintenance mode. -
各データストアのレプリケーションチャネルのステータスを確認するには、
ghe-repl-status
コマンドを使用します。$ ghe-repl-status
-
To enable replication of repository networks to the repository cache, set a data location policy. For more information, see "Data location policies."
Data location policies
You can control data locality by configuring data location policies for your repositories with the spokesctl cache-policy
command. Data location policies determine which repository networks are replicated on which repository caches. By default, no repository networks will be replicated on any repository caches until a data location policy is configured.
Data location policies affect only Git content. Content in the database, such as issues and pull request comments, will be replicated to all nodes regardless of policy.
Note: Data location policies are not the same as access control. You must use repository roles to control which users may access a repository. For more information about repository roles, see "Repository roles for an organization."
You can configure a policy to replicate all networks with the --default
flag. For example, this command will create a policy to replicate a single copy of every repository network to the set of repository caches whose cache_location
is "kansas".
$ ghe-spokesctl cache-policy set --default 1 kansas
To configure replication for a repository network, specify the repository that is the root of the network. A repository network includes a repository and all of the repository's forks. You cannot replicate part of a network without replicating the whole network.
$ ghe-spokesctl cache-policy set <owner/repository> 1 kansas
You can override a policy that replicates all networks and exclude specific networks by specifying a replica count of zero for the network. For example, this command specifies that any repository cache in location "kansas" cannot contain any copies of that network.
$ ghe-spokesctl cache-policy set <owner/repository> 0 kansas
Replica counts greater than one in a given cache location are not supported.