通过


使用 GitHub Copilot 现代化代理进行批量升级

通过批处理升级,可以同时跨多个存储库应用一致的现代化计划。 本文介绍如何在企业规模上有效地升级多个应用程序。

通过使用批处理升级,可以:

  • 使用相同的升级目标同时升级多个应用程序
  • 跨应用程序使用类似的升级模式应用一致的模式
  • 在将任务委派给云编码代理时,充分利用并行执行。

批量升级具有以下优势:

  • 一致的执行:

    • 标准化方法:在所有存储库中应用相同的现代化模式。
    • 减少可变性:确保类似应用程序的一致升级路径。
    • 可重用策略:跨应用程序使用组织特定的技能。
  • 规模和效率

    • 并行处理:使用云编码代理同时处理多个存储库。
    • 自动化工作流:与 CI/CD 管道集成,实现计划的现代化。
    • 节省时间:将现代化总时间从数周减少到数小时。

先决条件

  • 现代化命令行界面 (CLI)
  • 建议但不必需完成批量评估
  • 所有存储库都使用相同的编程语言(Java 或 .NET)。
  • 访问要升级的所有存储库。
  • 配置了 GitHub 身份验证(gh auth login)。

重要

批量升级中的所有存储库都必须使用相同的编程语言。 如果存储库使用不同的语言,批处理升级会将存储库标记为失败,并跳过它。

配置存储库

若要启用批量升级,请在工作目录中创建一个 .github/modernize/repos.json 文件,其中列出了要升级的所有存储库。

小窍门

对于示例存储库,请首先对其进行分叉,并确保你具有将作业委托给云编码代理的管理员权限。

[
  {
    "name": "PhotoAlbum-Java",
    "url": "https://github.com/Azure-Samples/PhotoAlbum-Java.git"
  },
  {
    "name": "ZavaSocialFrontEnd",
    "url": "https://github.com/Azure-Samples/ZavaSocialFrontEnd"
  }
]

存储库配置

每个条目都需要:

  • 名称:存储库的友好名称(用于报表和仪表板)。
  • url:Git 克隆 URL(HTTPS 格式)。

小窍门

你可以包括来自不同组织的存储库,只要你有权访问,就可以使用不同的身份验证方法。

文件位置

必须将repos.json文件放置于.github/modernize/repos.json

在运行批处理作时,现代化代理会自动检测此文件。

选择执行模式

批处理升级支持两种执行模式和两种交互方法:

执行模式

本地执行

  • 最适合:测试、较小的存储库集(1-5 存储库),或首选本地控制时。
  • 工作原理:在本地计算机上按顺序处理存储库。
  • 设置要求:除了基本先决条件之外,无需配置。

云编码代理委派

  • 最适合:企业规模操作、大型组合(5+ 存储库)或并行处理。
  • 工作原理:将任务提交到 GitHub 云编码代理,以便在云中并行执行。
  • 需要设置:每个存储库中的 MCP 服务器配置(在安装期间配置)。

小窍门

通过并行处理存储库,云编码代理委派可以减少从小时到分钟的总现代化时间。

交互方法

交互模式 (TUI)

  • 引导性菜单和提示体验。
  • 最适合首次使用者或当您想要查看选项时。
  • 支持本地和云执行。

非交互模式 (CLI/无外设)

  • 基于命令行的完全自动化。
  • 最佳用于 CI/CD 管道和自动化。
  • 支持使用 --delegate cloud 标志的本地和云执行。

注释

可以将任何执行模式与任何交互方法组合在一起。 例如:

  • modernize (交互式,本地)
  • modernize →选择云编码代理(交互式云)
  • modernize upgrade "Java 21" (非交互式、本地)
  • modernize upgrade "Java 21" --delegate cloud (非交互式云)

批处理升级的工作原理

批处理升级工作流:

  1. 语言检测:从第一个存储库自动检测项目语言(Java 或 .NET)。
  2. 计划创建:根据提示创建升级计划或使用最新的 LTS 版本。
  3. 执行:将升级应用到每个存储库。
  4. 验证:生成并验证每个存储库的更改。

运行批量升级

配置存储库并选择执行模式后,启动批处理升级。

交互模式(本地升级)

  1. 运行现代化工具:

    modernize
    
  2. 代理检测到 repos.json 文件并显示存储库列表:

    新式化 CLI 的屏幕截图,其中显示了终端中的“选择存储库”列表。

  3. 选择要升级的存储库,然后按 Enter 以确认选择。

    • Ctrl+A 以选择所有存储库。
    • 或使用箭头键 导航并按 Enter 以选择单个存储库。
  4. 选择主菜单中的 2. 升级

    新式化 CLI 的屏幕截图,其中显示了终端中的“升级运行时和框架”菜单选项。

  5. 若要运行升级,请选择 1。在本地升级

    新式化 CLI 的屏幕截图,其中显示了终端中的“本地升级”菜单选项。

  6. 代理自动:

    • 根据请求创建升级计划。
    • 按顺序将计划应用于每个存储库。
    • 在更改后生成并验证每个存储库。
    • 显示每个存储库的进度和摘要。

    新式化 CLI 的屏幕截图,其中显示了终端中每个存储库的升级进度。

交互模式(委派给云编码代理)

先决条件:配置 MCP 服务器

在运行升级之前,请在每个存储库中配置 GitHub Copilot 现代化 MCP 服务器。

对于 Java 应用程序,请在存储库设置的云编码代理部分添加此配置:

{
  "mcpServers": {
    "app-modernization": {
      "type": "local",
      "command": "npx",
      "tools": [
        "*"
      ],
      "args": [
        "-y",
        "@microsoft/github-copilot-app-modernization-mcp-server"
      ]
    }
  }
}

GitHub 的屏幕截图,其中显示了“存储库编码代理设置”窗格,其中突出显示了 MCP 配置部分。

步骤

  1. 运行现代化工具:

    modernize
    
  2. 代理检测到 repos.json 文件并显示存储库列表:

    新式化 CLI 的屏幕截图,其中显示了终端中的存储库列表。

  3. 选择要升级的存储库,然后按 Enter 以确认选择。

    • Ctrl+A 以选择所有存储库。
    • 或使用箭头键 导航并按 Enter 以选择单个存储库。
  4. 选择主菜单中的 2. 升级

  5. 若要运行升级,请选择 2。委托给云编码代理

    新式化 CLI 的屏幕截图,其中显示了终端中“委托到云编码代理”菜单选项。

  6. 代理自动:

    • 为每个存储库创建升级计划。

    • 为每个存储库提交一个云编码代理任务。

    • 在云中并行且独立地运行作业。

    • 显示每个存储库的作业 ID 和 PR URL。

      新式化 CLI 的屏幕截图,其中显示了将升级委派到终端中的云编码代理的进度。

    • 将任务委托给 AgentHQ 进行并行执行。

      GitHub 的屏幕截图,其中显示了“代理”窗格,其中升级任务委派给 AgentHQ。

    • 实时跟踪每个任务进度。

      GitHub 的屏幕截图,其中显示了“代理”窗格,其中包含单个云编码代理升级任务的进度跟踪。

    • 显示每个已完成任务的升级摘要。

      GitHub 的屏幕截图,其中显示了“代理”窗格,其中包含单个云编码代理任务的升级摘要。

非交互模式 (CLI)

对于自动化和 CI/CD 集成,请使用 modernize upgrade 以下命令:

在本地升级:

modernize upgrade "Java 21"

使用云编码代理进行升级:

modernize upgrade "Java 21" --delegate cloud

该命令会自动检测 repos.json 文件和处理所有存储库。

注释

有关批量无外设执行和更多 CLI 选项,请参阅 CLI 命令参考中的 “多存储库配置 ”部分。

查看结果

批处理升级完成后:

  1. 检查终端中显示的聚合报表

  2. 查看各个存储库更改

    cd <repository-name>
    git status
    git diff
    
  3. 为成功升级创建拉取请求

    cd <repository-name>
    gh pr create --title "Upgrade to Java 21" --body "Automated upgrade by modernization agent"
    

批处理升级疑难解答

常见问题

存储库访问错误:

  • 使用 gh auth status.. 验证 GitHub 身份验证。
  • 请确保有权访问repos.json中的所有存储库。

语言不匹配错误:

  • 请确保所有存储库 repos.json 都使用相同的语言(Java 或 .NET)。
  • 为不同语言创建单独的批处理作。

克隆失败:

  • 验证存储库 repos.json URL 是否正确且可访问。
  • 请确保对所有存储库具有适当的访问权限。
  • 检查网络连接和 VPN 设置。

升级后构建失败:

  • 查看汇总报告中的构建错误消息。
  • 检查是否需要更新其他依赖项。
  • 验证第三方库与新版本的兼容性。

单个存储库故障:

  • 即使单个存储库失败,批处理也会继续。
  • 查看聚合报表以识别失败的存储库。
  • 检查错误日志中的特定错误消息。
  • 分别重试失败的存储库。

云编码代理失败:

  • 检查 GitHub Actions 权限和配额限制。
  • 对于 .NET Framework,请确保正确设置 Windows 运行程序配置。

后续步骤

完成批量升级后,可以:

继续改进:

了解详细信息:

提供反馈

我们重视你的输入! 如果对批量升级或现代化代理有任何反馈, 请在 github-copilot-appmod 存储库中创建问题 ,或使用 GitHub Copilot 现代化反馈表单