Skip to main content

Configuring a repository cache

You can configure a repository cache by creating a new appliance, connecting the repository cache to your primary appliance, and configuring replication of repository networks to the repository cache.

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

  1. During the beta, you must enable the feature flag for repository caching on your primary GitHub Enterprise Server appliance.

    $ ghe-config cluster.cache-enabled true
    
  2. 在所需平台上设置新的 GitHub Enterprise Server 设备。 This appliance will be your repository cache. 更多信息请参阅“设置 GitHub Enterprise Server 实例”。

  3. 设置与主设备密码匹配的管理员密码,然后继续。

  4. 单击 Configure as Replica包含用于将新实例配置为副本的链接的安装选项

  5. 在“Add new SSH key”下,输入 SSH 密钥。 添加 SSH 密钥

  6. 单击 Add key(添加密钥)

  7. Connect to the repository cache's IP address using SSH.

    $ ssh -p 122 admin@REPLICA IP
  8. 要为副本生成密钥对,请使用包含主设备 IP 地址的 ghe-repl-setup 命令,并复制该命令返回的公钥。

    $ ghe-repl-setup PRIMARY IP
  9. 要将公钥添加到主设备上的授权密钥列表,请浏览到 https://PRIMARY-HOSTNAME/setup/settings,然后将您从副本复制的密钥添加到列表中。

  10. 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
  11. 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
  12. 要开始复制数据存储,请使用 ghe-repl-start 命令。

    $ ghe-repl-start

    警告: ghe-repl-start 会导致主要服务器短暂中断,期间用户可能会看到内部服务器错误。 为提供更简便的消息,请在副本节点上运行 ghe-repl-start 之前,先在主要节点上运行 ghe-maintenance -s,使副本置于维护模式。 在复制开始后,使用 ghe-maintenance -u 禁用维护模式。 Git replication will not progress while the primary node is in maintenance mode.

  13. 要验证各个数据存储复制通道的状态,请使用 ghe-repl-status 命令。

    $ ghe-repl-status
  14. 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.

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.