通过批处理升级,可以同时跨多个存储库应用一致的现代化计划。 本文介绍如何在企业规模上有效地升级多个应用程序。
通过使用批处理升级,可以:
- 使用相同的升级目标同时升级多个应用程序。
- 跨应用程序使用类似的升级模式应用一致的模式。
- 在将任务委派给云编码代理时,充分利用并行执行。
批量升级具有以下优势:
一致的执行:
- 标准化方法:在所有存储库中应用相同的现代化模式。
- 减少可变性:确保类似应用程序的一致升级路径。
- 可重用策略:跨应用程序使用组织特定的技能。
规模和效率
- 并行处理:使用云编码代理同时处理多个存储库。
- 自动化工作流:与 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(非交互式云)
批处理升级的工作原理
批处理升级工作流:
- 语言检测:从第一个存储库自动检测项目语言(Java 或 .NET)。
- 计划创建:根据提示创建升级计划或使用最新的 LTS 版本。
- 执行:将升级应用到每个存储库。
- 验证:生成并验证每个存储库的更改。
运行批量升级
配置存储库并选择执行模式后,启动批处理升级。
交互模式(本地升级)
运行现代化工具:
modernize代理检测到
repos.json文件并显示存储库列表:选择要升级的存储库,然后按
Enter以确认选择。-
按
Ctrl+A以选择所有存储库。 -
或使用箭头键 导航并按
Enter以选择单个存储库。
-
按
选择主菜单中的 2. 升级。
若要运行升级,请选择 1。在本地升级。
代理自动:
- 根据请求创建升级计划。
- 按顺序将计划应用于每个存储库。
- 在更改后生成并验证每个存储库。
- 显示每个存储库的进度和摘要。
交互模式(委派给云编码代理)
先决条件:配置 MCP 服务器
在运行升级之前,请在每个存储库中配置 GitHub Copilot 现代化 MCP 服务器。
对于 Java 应用程序,请在存储库设置的云编码代理部分添加此配置:
{
"mcpServers": {
"app-modernization": {
"type": "local",
"command": "npx",
"tools": [
"*"
],
"args": [
"-y",
"@microsoft/github-copilot-app-modernization-mcp-server"
]
}
}
}
步骤
运行现代化工具:
modernize代理检测到
repos.json文件并显示存储库列表:选择要升级的存储库,然后按
Enter以确认选择。-
按
Ctrl+A以选择所有存储库。 -
或使用箭头键 导航并按
Enter以选择单个存储库。
-
按
选择主菜单中的 2. 升级。
若要运行升级,请选择 2。委托给云编码代理。
代理自动:
非交互模式 (CLI)
对于自动化和 CI/CD 集成,请使用 modernize upgrade 以下命令:
在本地升级:
modernize upgrade "Java 21"
使用云编码代理进行升级:
modernize upgrade "Java 21" --delegate cloud
该命令会自动检测 repos.json 文件和处理所有存储库。
注释
有关批量无外设执行和更多 CLI 选项,请参阅 CLI 命令参考中的 “多存储库配置 ”部分。
查看结果
批处理升级完成后:
检查终端中显示的聚合报表。
查看各个存储库更改:
cd <repository-name> git status git diff为成功升级创建拉取请求:
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.jsonURL 是否正确且可访问。 - 请确保对所有存储库具有适当的访问权限。
- 检查网络连接和 VPN 设置。
升级后构建失败:
- 查看汇总报告中的构建错误消息。
- 检查是否需要更新其他依赖项。
- 验证第三方库与新版本的兼容性。
单个存储库故障:
- 即使单个存储库失败,批处理也会继续。
- 查看聚合报表以识别失败的存储库。
- 检查错误日志中的特定错误消息。
- 分别重试失败的存储库。
云编码代理失败:
- 检查 GitHub Actions 权限和配额限制。
- 对于 .NET Framework,请确保正确设置 Windows 运行程序配置。
后续步骤
完成批量升级后,可以:
继续改进:
- 运行批处理评估 - 重新评估以验证改进并识别新机会。
- 为组织特定的模式创建自定义技能 - 捕获成功的模式以供重复使用。
了解详细信息:
提供反馈
我们重视你的输入! 如果对批量升级或现代化代理有任何反馈, 请在 github-copilot-appmod 存储库中创建问题 ,或使用 GitHub Copilot 现代化反馈表单。