通过批处理升级,可以同时跨多个存储库应用一致的现代化计划。 本文介绍如何在企业规模上有效地升级多个应用程序。
通过使用批处理升级,可以:
- 使用相同的升级目标同时升级多个应用程序。
- 跨应用程序使用类似的升级模式应用一致的模式。
- 在将任务委派给云编码代理时,充分利用并行执行。
批量升级具有以下优势:
一致的执行:
- 标准化方法:在所有存储库中应用相同的现代化模式。
- 减少可变性:确保类似应用程序的一致升级路径。
- 可重用策略:跨应用程序使用组织特定的技能。
规模和效率
- 并行处理:使用云编码代理同时处理多个存储库。
- 自动化工作流:与 CI/CD 管道集成,实现计划的现代化。
- 节省时间:将现代化总时间从数周减少到数小时。
先决条件
- 现代化命令行界面 (CLI)
- 建议但不必需完成批量评估。
- 所有存储库都使用相同的编程语言(Java或.NET)。
- 访问要升级的所有存储库。
- 已配置GitHub身份验证(
gh auth login)。
重要
批量升级中的所有存储库都必须使用相同的编程语言。 如果存储库使用不同的语言,批处理升级会将存储库标记为失败,并跳过它。
配置存储库
现代化代理支持多种方法来指定要升级的存储库:
- 当前文件夹:升级当前工作目录中的项目。
- 手动输入:直接输入本地目录路径或远程 Git URL。
- 存储库配置文件:使用列出所有存储库的 JSON 配置文件。
存储库配置文件
对于跨多个存储库的批处理操作,请创建 JSON 配置文件以列出所有存储库。 例如,在工作目录中创建它 .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"
}
]
完整格式 (包含分支和本地路径):
{
"repos": [
{
"name": "PhotoAlbum-Java",
"url": "https://github.com/Azure-Samples/PhotoAlbum-Java.git",
"branch": "main"
},
{
"name": "local-project",
"path": "/absolute/path/to/project"
}
]
}
每个存储库条目支持以下字段:
| 领域 | 说明 | 必需 |
|---|---|---|
name |
存储库的友好名称(用于报表和仪表板)。 | 是的 |
url |
HTTPS 或 SSH 格式的 Git 克隆 URL。 | 其中一个url或path |
path |
绝对本地目录路径。 | 其中之一url或path |
branch |
克隆后要签出的分支。 | 否 |
description |
人工可读说明。 | 否 |
小窍门
你可以包括来自不同组织的存储库,只要你有权访问,就可以使用不同的身份验证方法。
在互动模式下选择“从配置文件”时,新式化代理会自动检测repos.json位于.github/modernize/repos.json的文件。 还可以提供自定义路径。
选择执行模式
批处理升级支持两种执行模式和两种交互方法:
执行模式
本地执行
- 最适合:测试、较小的存储库集(1-5 存储库),或首选本地控制时。
- 工作原理:在本地计算机上按顺序处理存储库。
- 设置要求:除了基本先决条件之外,无需配置。
- 支持:Git URL 和本地路径存储库。
云编码代理委派
- 最适合:企业规模操作、大型组合(5+ 存储库)或并行处理。
- 工作原理:将任务提交到GitHub云编码代理,以便在云中并行执行。
- 需要设置:每个存储库中的 MCP 服务器配置(在安装期间配置)。
- Supports:仅包含GitHub(github.com)URL 的存储库。 不支持本地路径和非GitHub提供程序。
重要
云编码代理委派要求存储库具有 GitHub (github.com) 存储库 URL。 在云委托期间,会跳过那些使用本地路径指定的存储库或托管在非GitHub托管服务(例如GitLab、Azure DevOps)上的存储库。 对这些存储库使用本地执行。
小窍门
通过并行处理存储库,云编码代理委派可以减少从小时到分钟的总现代化时间。
交互方法
交互模式 (TUI)
- 引导性菜单和提示体验。
- 最适合首次使用者或当您想要查看选项时。
- 支持本地和云执行。
非交互模式 (CLI/无外设)
- 基于命令行的完全自动化。
- 最佳用于 CI/CD 管道和自动化。
- 支持使用
--delegate cloud标志的本地和云执行。
注释
可以将任何执行模式与任何交互方法组合在一起。 例如:
-
modernize→选择“升级”(交互式,本地) -
modernize选择“升级”→“委托到云代理”(交互式,云) -
modernize upgrade "Java 21" --source ./repos.json(非交互式,本地) -
modernize upgrade "Java 21" --source ./repos.json --delegate cloud(非交互式云)
批处理升级的工作原理
批处理升级工作流:
- 语言识别:从第一个存储库中自动识别项目语言(Java 或 .NET)。
- 计划创建:根据提示创建升级计划或使用最新的 LTS 版本。
- 执行:将升级应用到每个存储库。
- 验证:生成并验证每个存储库的更改。
运行批量升级
配置存储库并选择执行模式后,启动批处理升级。
交互模式(本地升级)
运行现代化工具:
modernize从主菜单中选择 “升级 ”。
选择如何指定目标存储库。 从配置文件中选择以使用
repos.json文件。小窍门
还可以选择 “手动输入 ”以直接输入本地路径或远程 Git URL,或 选择“当前”文件夹 以升级当前目录中的项目。
repos.json如果在默认位置检测到该文件,代理会自动填充该文件。 否则,请输入配置文件的路径,然后按 Enter。默认情况下,所有存储库均处于选中状态。 取消选择想要跳过的任何存储库,然后按 Enter 确认选择。
- 使用箭头键 进行导航,然后按 空格 键切换单个存储库。
选择执行模式。 选择 本地升级。
输入升级目标提示(例如,
Java 21或.NET 10),或按 Enter 接受默认版本(最新 LTS 版本)。代理自动:
- 根据请求创建升级计划。
- 按顺序将计划应用于每个存储库。
- 在更改后生成并验证每个存储库。
- 显示每个存储库的进度和摘要。
交互模式(委派给云编码代理)
先决条件:配置 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。默认情况下,所有存储库均处于选中状态。 取消选择想要跳过的任何存储库,然后按 Enter 确认选择。 使用箭头键进行导航,然后按 空格 键切换单个存储库。
选择执行模式。 选择 “委托到云代理”。
输入升级目标提示(例如,
Java 21),或按 Enter 接受默认值。代理自动:
非交互模式 (CLI)
对于自动化和 CI/CD 集成,请使用 modernize upgrade 以下命令:
使用存储库配置文件在本地升级:
modernize upgrade "Java 21" --source .github/modernize/repos.json
通过直接指定源来升级多个存储库:
modernize upgrade "Java 21" --source https://github.com/org/repo1 --source https://github.com/org/repo2
使用云编码代理进行升级:
modernize upgrade "Java 21" --source .github/modernize/repos.json --delegate cloud
注释
有关批量无外设执行和更多 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 现代化反馈表单。