仓库镜像

  • Tier: 基础版,专业版,旗舰版
  • Offering: JihuLab.com, 私有化部署

您可以将软件包从外部源进行镜像。您可以选择哪个软件包作为源。分支、标签和提交会自动同步。

存在几种镜像方法:

  • 推送:将软件包从极狐GitLab 镜像到其他位置。
  • 拉取:从其他位置镜像软件包。可用于专业版和旗舰版。
  • 双向 镜像也可用,但可能会导致冲突。

在以下情况下镜像软件包:

  • 您的项目的规范版本已经迁移到极狐GitLab。为了继续在其先前位置提供项目副本,请将您的极狐GitLab 软件包配置为 推送镜像。您对极狐GitLab 软件包所做的更改会复制到旧位置。
  • 您的极狐GitLab 实例是私有的,但您希望开源一些项目。
  • 您已经迁移到极狐GitLab,但项目的规范版本在其他地方。将您的极狐GitLab 软件包配置为其他项目的 拉取镜像。您的极狐GitLab 软件包会拉取项目的提交、标签和分支副本。这些副本可用于极狐GitLab。

以下情况不支持:

  • SCP 风格的 URL。实施 SCP 风格 URL 的工作正在进行中。
  • 通过 dumb HTTP 协议镜像软件包。

创建软件包镜像#

先决条件:

  • 您必须至少拥有项目的 维护者 角色。
  • 如果您的镜像通过 ssh:// 连接,必须在服务器上检测到主机密钥,或者您必须拥有密钥的本地副本。
  1. 在左侧边栏,选择 搜索或转到 并找到您的项目。

  2. 选择 设置 > 软件包

  3. 展开 镜像软件包

  4. 选择 添加新

  5. 输入 Git 软件包 URL。软件包必须可以通过 http://https://ssh://git:// 访问。

  6. 选择 镜像方向。有关更多信息,请参阅 拉取镜像ing推送镜像ing

  7. 如果您输入了 ssh:// URL,请选择以下任意选项:

    • 检测主机密钥:极狐GitLab 从服务器获取主机密钥并显示指纹。
    • 手动输入主机密钥,并将主机密钥输入 SSH 主机密钥

    在镜像软件包时,极狐GitLab 确认至少有一个存储的主机密钥在连接之前匹配。此检查保护您的镜像免受恶意代码注入或密码被盗。

    • 要使用 SSH 身份验证创建软件包镜像,请参阅以下示例
  8. 选择 身份验证方法。有关更多信息,请参阅 镜像的身份验证方法

  9. 如果您使用 SSH 主机密钥进行身份验证,请验证主机密钥以确保其正确。

  10. 为了防止强制推送超过分歧的引用,请选择 保持分歧引用。有关更多信息,请参阅 保持分歧引用

  11. 可选。要限制镜像的分支数量,请选择 仅镜像受保护分支 或在 镜像特定分支 中输入正则表达式。

  12. 选择 镜像软件包

示例:使用 SSH 身份验证创建镜像#

如果您选择 SSH 公钥 作为您的身份验证方法,极狐GitLab 会为您的极狐GitLab 软件包生成公钥。您必须将此密钥提供给非极狐GitLab 服务器。有关更多信息,请参阅 获取您的 SSH 公钥

使用 SSH 身份验证镜像软件包:

  1. 在左侧边栏,选择 搜索或转到 并找到您的项目。
  2. 选择 设置 > 软件包
  3. 展开 镜像软件包
  4. 选择 添加新
  5. 输入 Git 软件包 URL。提供以下格式的 URL:ssh://gitlab.com/gitlab-org/gitlab.git
  6. 选择 镜像方向
  7. 选择 检测主机密钥手动输入主机密钥
  8. 身份验证方法 字段中,选择 SSH 公钥
  9. 用户名 字段中,添加 git
  10. 可选。配置 镜像用户镜像分支 设置。
  11. 选择 镜像软件包
  12. 复制 SSH 公钥并提供给您的非极狐GitLab 服务器。

仅镜像受保护分支#

您可以选择仅镜像镜像项目中的 受保护分支,无论是从远程软件包还是到远程软件包。对于 拉取镜像ing,镜像项目中的非受保护分支不会被镜像,并且可能会分歧。

要使用此选项,请在创建软件包镜像时选择 仅镜像受保护分支

镜像特定分支#

  • Tier: 专业版,旗舰版
  • Offering: JihuLab.com, 私有化部署
History
    • 使用 API 中的正则表达式匹配镜像分支作为选项在极狐GitLab 15.8 中引入,使用名为 mirror_only_branches_match_regex功能标志。默认情况下禁用。
    • 项目设置中的选项在极狐GitLab 15.9 中引入。
    • 在极狐GitLab 16.0 中默认启用。
    • 在极狐GitLab 16.2 中 GA。功能标志 mirror_only_branches_match_regex 已移除。

要仅镜像名称匹配 re2 正则表达式的分支,请在 镜像特定分支 字段中输入正则表达式。名称不匹配正则表达式的分支不会被镜像。

更新镜像#

当镜像软件包更新时,所有新的分支、标签和提交在项目的活动提要中可见。极狐GitLab 的软件包镜像会自动更新。您也可以手动触发更新:

  • 在 JihuLab.com 上最多每五分钟更新一次。
  • 根据极狐GitLab 私有化部署实例上管理员设置的 拉取镜像ing 间隔限制

极狐GitLab Silent Mode 禁止推送和拉取更新。

强制更新#

虽然镜像计划自动更新,但您可以强制立即更新,除非:

先决条件:

  • 您必须至少拥有项目的 维护者 角色。
  1. 在左侧边栏,选择 搜索或转到 并找到您的项目。
  2. 选择 设置 > 软件包
  3. 展开 镜像软件包
  4. 滚动到 镜像软件包 并识别要更新的镜像。
  5. 选择 立即更新 ()。

镜像的身份验证方法#

创建镜像时,您必须为其配置身份验证方法。极狐GitLab 支持这些身份验证方法:

对于 项目访问令牌群组访问令牌,使用用户名(而不是令牌名)和令牌作为密码。

SSH 身份验证#

SSH 身份验证是相互的:

  • 您必须向服务器证明您有权访问软件包。
  • 服务器也必须 向您证明 它是它声称的身份。

对于 SSH 身份验证,您提供您的凭证作为密码或 公钥。其他软件包所在的服务器提供其凭证作为 主机密钥。您必须手动 验证此主机密钥的指纹

如果您通过 SSH 镜像(使用 ssh:// URL),您可以使用以下方式进行身份验证:

  • 基于密码的身份验证,就像通过 HTTPS 一样。
  • 公钥身份验证。这种方法通常比密码身份验证更安全,尤其是当其他软件包支持部署密钥 时。

获取您的 SSH 公钥#

当您镜像软件包并选择 SSH 公钥 作为身份验证方法时,极狐GitLab 会为您生成公钥。非极狐GitLab 服务器需要此密钥才能与您的极狐GitLab 软件包建立信任。要复制您的 SSH 公钥:

  1. 在左侧边栏,选择 搜索或转到 并找到您的项目。
  2. 选择 设置 > 软件包
  3. 展开 镜像软件包
  4. 滚动到 镜像软件包
  5. 识别正确的软件包,并选择 复制 SSH 公钥 ()。
  6. 将公钥添加到其他软件包的配置中:
    • 如果其他软件包托管在极狐GitLab 上,请将公钥添加为 部署密钥
    • 如果其他软件包托管在其他地方,请将密钥添加到您的用户的 authorized_keys 文件中。将整个 SSH 公钥粘贴到文件中的独立行中并保存。

如果您必须随时更改密钥,可以删除并重新添加镜像以生成新密钥。使用新密钥更新其他软件包以保持镜像运行。

生成的密钥存储在极狐GitLab 数据库中,而不是文件系统中。因此,镜像的 SSH 公钥身份验证不能在预接收钩子中使用。

验证主机密钥#

使用主机密钥时,始终验证指纹是否符合您的预期。如果您运行极狐GitLab 私有化部署且拥有其他软件包服务器的访问权限,可以使用以下命令安全地收集密钥指纹:

shell
$ cat /etc/ssh/ssh_host*pub | ssh-keygen -E md5 -l -f - 256 MD5:f4:28:9f:23:99:15:21:1b:bf:ed:1f:8e:a0:76:b2:9d root@example.com (ECDSA) 256 MD5:e6:eb:45:8a:3c:59:35:5f:e9:5b:80:12:be:7e:22:73 root@example.com (ED25519) 2048 MD5:3f:72:be:3d:62:03:5c:62:83:e8:6e:14:34:3a:85:1d root@example.com (RSA)

较旧版本的 SSH 可能要求您从命令中删除 -E md5