Skip to main content

使用企业实时迁移迁移存储库

在停机时间最短的情况下,从GitHub Enterprise Server迁移到GHE.com。

谁可以使用此功能?

Site administrators on GitHub Enterprise Server who are also enterprise owners on GHE.com.

提示

按照本指南操作,可以参考 企业实时迁移 命令行界面参考 获取更详细的用法信息。 如果遇到错误,请参阅 排查从 GitHub Enterprise Server 到 GHE.com 的实时迁移问题

先决条件

确保环境和开发人员已准备好进行迁移。 请参阅“准备从 GitHub Enterprise Server 到 GHE.com 的实时迁移”。

1. 配置 GitHub Enterprise Server

在创建令牌和执行迁移之前, GitHub Enterprise Server 必须在实例上设置一些配置。 这些配置值适用于所有 ELM 迁移。 GitHub Enterprise Server应用新配置时,开发人员可能会遇到短暂的停机时间。

  1. GitHub Enterprise Server通过 SSH 访问管理程序。 请参阅“访问管理 shell (SSH)”。

  2. 使用 ghe-config. 设置以下配置变量。

    例如:ghe-config app.elm-exporter.enabled true

    可变将此设置为...
    app.elm-exporter.enabledtrue
    app.elm.internal-webhooks-enabledtrue
    app.elm-exporter.webhooks-loopback-address-enabledtrue
    secrets.elm-exporter.migration-target-url目标企业的 API URL(例如: https://api.octocorp.ghe.com) 。

不要在 URL 的末尾包含尾部斜杠。 | | secrets.elm-exporter.source-user | 与操作员令牌 GitHub Enterprise Server 关联的用户名。 这应该是你在 GitHub Enterprise Server 上的用户名;如果其他人要创建此令牌,则此处的值应设置为他们的用户名。 我们推荐ghe-admin用户。 |

  1. 应用配置。

    Shell
    ghe-config-apply
    
  2. 退出 SSH 会话。 在本地终端会话中运行其余命令。

2.创建具有企业访问权限的操作员令牌

操作员必须使用向源企业和目标企业进行身份验证。 有关创建令牌的说明,请参阅 管理个人访问令牌

确保记下这两个令牌,因为下一步将需要它们。

  1. GitHub Enterprise Server 上,创建 personal access token (classic) 并选择所需的范围:

    • admin:enterprise

    配置时,将此令牌用作源令牌ELM CLI。

  2. GHE.com 上,创建一个 personal access token (classic) 并选择所需的作用域:

    • admin:enterprise
    • admin:org

    配置时,将此令牌用作目标令牌ELM CLI。

3.配置 ELM 命令行工具

你将从本地终端会话中运行迁移,并使用 GitHub CLI 的扩展程序。

  1. 在本地计算机上安装GitHub CLI。 必须使用版本 2.0 或更高版本。

  2. 安装 ELM 扩展。

    Shell
    gh extension install github/gh-elm
    
  3. 启动安装向导以配置扩展。

    Shell
    gh elm configure
    
  4. 按照安装向导中的说明操作,为源端和目标端提供 API URL(例如:https://api.SUBDOMAIN.ghe.com),以及您在上一步中创建的令牌。

这些值中的任何值也可以作为 CLI 标志提供给任何 gh elm 命令,这将优先于配置。 例如: --target-url https://api.SUBDOMAIN.ghe.com

此设置过程会将 URL 存储到操作系统配置目录中一个特定于平台的配置文件里,位置为 gh-elm/config.json。 访问令牌将安全地存储在计算机的机密存储中。

4.配置实时迁移机密

除了具有企业访问权限的操作员令牌外,还必须为源组织和目标组织创建一个 personal access token (classic) 令牌。 对于要从中迁移的每个组织,必须重复这些步骤。

创建访问令牌

ELM 必须使用 personal access token (classic) 对迁移的源和目标进行身份验证。 有关创建令牌的说明,请参阅 管理个人访问令牌

请务必记下这些令牌,因为在下一步中会用到它们。

  1. GitHub Enterprise Server 上创建一个personal access token (classic),并使用以下作用域:

    • repo
    • admin:org
    • admin:repo_hook
    • admin:org_hook

    这是你的源令牌。

  2. GHE.com 上创建一个具有以下范围的 personal access token (classic):

    • repo
    • workflow
    • admin:org
    • admin:repo_hook
    • admin:enterprise

    这是你的目标令牌。

    重要

    如果在 GHE.com 上对目标组织强制实施了单点登录,则必须为单点登录授权 GHE.com 令牌。

配置组织的 ELM 机密信息

使用 gh elm config 命令设置源和目标访问令牌:

  1. 设置源令牌。

    Shell
    gh elm config set-source-pat EXISTING-GHES-ORG
    

    当系统询问时,将源令牌粘贴到终端。

  2. 设置目标令牌。

    Shell
    gh elm config set-target-pat EXISTING-GHES-ORG
    

    当系统询问时,将目标令牌粘贴到终端。

您还可以通过 gh elm config org-tokens EXISTING-GHES-ORG 以交互方式设置令牌,或者在位于 https://GHES_HOSTNAME/organizations/EXISTING-GHES-ORG/settings/secrets/elm-exporter/ 的组织设置中进行设置。

5. 创建迁移

通过指定源和目标存储库详细信息创建新的迁移。

注意

target-org可以是新的或现有的。 如果目标组织尚不存在,则会在迁移期间创建它。 但是,不会迁移来自源组织的设置。

Shell
gh elm migration create \
  --source-org EXISTING-GHES-ORG \
  --source-repo EXISTING-GHES-REPO \
  --target-org GHEC-ORG \
  --target-repo NEW-GHEC-REPO

例如:

gh elm migration create \
  --source-org my-ghes-org \
  --source-repo my-ghes-repo \
  --target-org my-dr-org \
  --target-repo my-dr-repo

可选标志:

  • --start:如果已准备好立即开始迁移。
  • --target-visibility:默认情况下,迁移的存储库是使用 内部 可见性创建的,但可以指定 private

保存迁移 ID

应会看到如下所示的响应:

{
  "migrationId": "2b5c9eae-b5da-4306-ab04-2a29cc2b7cb9",
  "expiresAt": "2026-02-11T21:49:33.619162159Z"
}

导出 migrationId 为变量,因为下一个命令将需要它。 例如:

export MIGRATION_ID='2b5c9eae-b5da-4306-ab04-2a29cc2b7cb9'

6. 开始迁移

如果尚未启动迁移,请使用刚刚保存的迁移 ID 立即启动它。

Shell
gh elm migration start --migration-id $MIGRATION_ID

这会启动回填和实时更新过程。 ELM 正在从源存储库收集数据,并且监听支持的 Webhook 事件。

7. 监视迁移

迁移开始时,应会看到新的存储库。GHE.com 在迁移过程中,你将看到存储库填充了初始数据负载,并在开发人员继续在源存储库中工作时接收更新。

可以使用以下命令以交互方式 watch 监视迁移进度:

gh elm migration watch $MIGRATION_ID

这将轮询迁移状态 API,并显示一个可自动刷新的文本界面,以反映当前进度。

使用 migration status 进行程序化监控

如果您需要适用于自动化的迁移状态信息,请使用 status 命令:

Shell
gh elm migration status --migration-id $MIGRATION_ID

响应中最重要的指示器是 combinedState 对象中的状态。 当状态达到 COMBINED_STATUS_READY_FOR_CUTOVER时,应准备好继续执行下一步。 但是,如果任何单个资源未能成功迁移,您可能需要对此进行调查,届时displayMessage中会发出警报。

例如:

  "combinedState":  {
    "status":  "COMBINED_STATUS_READY_FOR_CUTOVER",
    "displayMessage":  "Ready for cutover (1 resources failed)",
    "repositories":  [
      {
        "repositoryNwo":  "new-test-org/my-new-repo",
        "phase":  "REPOSITORY_PHASE_READY_FOR_CUTOVER",
        "displayStatus":  "Ready for cutover (1 failed)"
      }
    ],
    "readyForCutover":  true,
    "cutoverBlockers":  []
  },

提示:

8. 完成迁移

当迁移准备好进行切换时,可以完成迁移。 切换过程将存档源存储库,使其永久处于只读状态,除非存储库管理员将其解除存档。

Shell
gh elm migration cutover --migration-id $MIGRATION_ID

继续监视迁移。 在响应顶部看到 MIGRATION_STATUS_COMPLETED 状态时,迁移已完成,但仍有一些后续任务需要执行,以便为 GitHub Enterprise Server 的用户提供访问权限。

后续步骤

向用户授予对新存储库的访问权限,并将活动与用户帐户进行协调。 请参阅“完成从 GitHub Enterprise Server 到 GHE.com 的实时迁移”。