使用GitHub Copilot现代化代理进行批量评估

通过批处理评估,可以同时分析多个应用程序,从而全面了解应用程序的现代化环境。 本文指导你完成高效评估多个存储库的过程。

批处理评估对于迁移规划尤其有用,因为它使你能够一次性有效地评估各种应用程序的准备情况和要求。 通过使用批处理评估,可以同时评估不同的存储库,并为每个应用程序获取详细的评估报告。 它生成两种类型的报告来支持迁移规划:

  • 每个应用报告:提供有关在单个存储库级别确定的所有现代化问题的详细见解。
  • 汇总报告:提供所有被评估应用程序的总体视角,摘要见解,以及有关 Azure 服务、目标平台和升级路径的建议。 此外,聚合报表还包含用于轻松访问每个应用报表的快捷方式。

批处理评估具有以下优势:

  • 跨应用程序可见性:

    • 聚合报表:跨应用程序获取全面视图。
    • 跨存储库分析:确定应用程序之间的常见模式和依赖关系。
    • 优先级见解:了解哪些应用程序需要立即注意。
  • 规模和效率

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

先决条件

  • 现代化命令行界面 (CLI)
  • 访问要评估的所有存储库。
  • 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": "PhotoAlbum",
    "url": "https://github.com/Azure-Samples/PhotoAlbum.git"
  },
  {
    "name": "eShopOnWeb",
    "url": "https://github.com/dotnet-architecture/eShopOnWeb.git"
  }
]

完整格式 (包含分支和本地路径):

{
  "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。 其中之一urlpath
path 绝对本地目录路径。 其中之一urlpath
branch 克隆后要签出的分支。
description 人工可读说明。

应用分组的完整格式 (可选,用于有组织的报告):

可以添加一个 apps[] 部分,将存储库组织到逻辑应用程序中。 定义应用后,聚合报表按应用程序组织结果,并支持将报表分发到外部目标。

{
  "repos": [
    {
      "name": "PhotoAlbum-Java",
      "url": "https://github.com/Azure-Samples/PhotoAlbum-Java.git",
      "branch": "main"
    },
    {
      "name": "PhotoAlbum",
      "url": "https://github.com/Azure-Samples/PhotoAlbum.git"
    }
  ],
  "apps": [
    {
      "identifier": "photo-app",
      "description": "Photo management application",
      "repos": ["PhotoAlbum-Java"],
      "output": {
        "type": "local",
        "path": "/path/to/reports/photo-app"
      }
    }
  ]
}

每个应用条目都支持:

领域 说明 必需
identifier 应用程序的唯一显示名称。 是的
description 人工可读说明。
repos 属于此应用的存储库名称列表。 是的
output 在哪里分发应用程序的评估报告生成后的版本。

output 字段支持以下分布类型:

类型 说明 必填字段
local 将报表复制到本地目录。 path
git 将报表推送到 Git 存储库。 URL 格式为 https://github.com/org/repo.git#branch:path. url

小窍门

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

在互动模式下选择repos.json时,新式化代理会自动检测.github/modernize/repos.json位于的文件。 还可以提供自定义路径。

运行批量评估

有两种执行模式可用:

  • 本地执行:现代化代理在本地计算机上逐个处理存储库。 此模式最适合一组较小的应用程序或初始测试。 支持 Git URL 和本地路径存储库。
  • Cloud 编码代理委派:现代化代理将任务提交给 GitHub 云编码代理,以便在云端进行并行处理。 对于多存储库方案,此模式更快。

重要

云编码代理委派要求存储库具有 GitHub (github.com) 存储库 URL。 云委派不支持本地路径存储库和非GitHub提供程序(GitLab、Azure DevOps)。 对这些存储库使用本地执行。

小窍门

通过使用云编码代理委派,可以跨所有存储库启用并行执行。 此方法大大减少了大型投资组合的总评估时间。

交互模式(在本地评估)

  1. 运行现代化工具:

    modernize
    
  2. 从主菜单中选择 “评估 ”。

    Modernize CLI 的屏幕截图,显示了终端中包含“评估”选项的主菜单。

  3. 选择如何指定目标存储库。 从配置文件中选择以使用repos.json文件。

    新式化 CLI 的屏幕截图,其中显示了终端中的源类型选择。

    小窍门

    还可以选择 “手动输入 ”以直接输入本地路径或远程 Git URL,或者 选择“当前”文件夹 来评估当前目录中的项目。

  4. repos.json如果在默认位置检测到该文件,代理会自动填充该文件。 否则,请输入配置文件的路径,然后按 Enter

  5. 默认情况下,所有存储库均处于选中状态。 取消选择想要跳过的任何存储库,然后按 Enter 确认选择。

    • 使用箭头键 进行导航,然后按 空格 键切换单个存储库。

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

  6. 选择执行模式。 选择“ 在本地评估”。

    新式化 CLI 的屏幕截图,其中显示了终端中的评估模式菜单。

  7. 选择要分析的评估域。 从 Java 升级Cloud Readiness 中进行选择,然后按 Enter

    新式化 CLI 的屏幕截图,其中显示了终端中的评估域选择。

  8. 查看和配置评估选项。 配置页显示按语言和域分组的选项:

    • Java / 一般性:分析范围(仅问题,问题和技术,或问题、技术与依赖项)。
    • Java/ JAVA UPGRADE:目标运行时(OpenJDK 11、17 或 21)。
    • Java/CLOUD READINESS:目标计算服务、目标操作系统和容器化。
    • .NET/CLOUD READINESS:目标计算服务。

    使用箭头键进行导航,按 Enter 更改值,或选择 “继续 ”继续执行当前设置。

    新式化 CLI 的屏幕截图,其中显示了终端中的评估配置页。

    小窍门

    建议的默认值适用于大多数方案。 仅当有特定要求(例如面向特定 JDK 版本或Azure计算服务)时,才需要更改这些设置。

  9. 输入评估结果的输出路径,或按 Enter 接受默认值。

  10. 代理自动:

    • 克隆远程存储库(直接使用本地路径存储库)。

    • 逐个对每个存储库运行评估。

    • 生成单个评估报告。

      新式化 CLI 的屏幕截图,其中显示了终端中单个评估报表生成的输出。

    • 创建聚合报表。

      新式化 CLI 的屏幕截图,其中显示了终端中聚合报表生成的输出。

  11. 评估完成后,代理会自动打开聚合报表。

    新式化 CLI 的屏幕截图,其中显示了聚合报表的内容。

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

首先,在每个应用程序存储库中配置云编码代理。 若要配置云编码代理,请分叉示例存储库。

.NET 应用程序的配置

配置为在 Windows 上运行 .NET Framework 应用程序

默认情况下,Copilot编码代理在 Ubuntu Linux 环境中运行。 对于 .NET Framework 应用程序,需要一个Windows环境。 若要启用它,请在应用程序代码仓库的.github/workflows/copilot-setup-steps.yaml分支中配置main,如以下示例所示:

# Windows-based Copilot Setup Steps for .NET tasks
# Note: Windows runners have firewall limitations that may affect some network operations
# Use this workflow for .NET projects that require Windows-specific tooling

name: "Copilot Setup Step (Windows)"

on:
  workflow_dispatch:

jobs:
  copilot-setup-steps:
    runs-on: windows-latest
    permissions:
      contents: read
    steps:
      - name: Checkout code
        uses: actions/checkout@v5

详细了解:通过Copilot设置步骤自定义Copilot的开发环境

禁用防火墙

在存储库设置中禁用Copilot编码代理的集成防火墙,如下图所示:

GitHub 的截图显示了存储库设置,其中“启用防火墙”设置为“关”。

Java应用程序的配置

在存储库设置中,按照以下示例在云编码代理部分配置 GitHub Copilot 现代化 MCP 服务器:

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

GitHub 的截图,显示了代码代理设置的存储库,并突出显示了 MCP 配置部分。

步骤

  1. 运行现代化工具:

    modernize
    
  2. 从主菜单中选择 “评估 ”。

    Modernize CLI 的屏幕截图,显示了终端中包含“评估”选项的主菜单。

  3. 选择如何指定目标存储库。 选择从配置文件来使用repos.json文件,或选择手动输入直接输入 GitHub 存储库 URL。

    新式化 CLI 的屏幕截图,其中显示了终端中的源类型选择。

  4. 如果选择 从配置文件, 并且在默认位置检测到该文件,代理会自动填写该文件。 否则,请输入配置文件的路径,然后按 Enter

  5. 默认情况下,所有存储库均处于选中状态。 取消选择想要跳过的任何存储库,然后按 Enter 确认选择。

    • 使用箭头键 进行导航,然后按 空格 键切换单个存储库。

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

  6. 选择执行模式。 选择 委托到云代理

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

    注释

    委托云编码代理时,不支持域选择和评估配置步骤。 云代理使用默认配置来运行评估。

  7. 输入评估结果的输出路径,或按 Enter 接受默认值。

  8. 代理会自动将每个存储库的评估任务委托给云编码代理,并在云中并行执行它们。

    Modernize CLI 的屏幕截图,显示了在终端中将评估任务委派给云编码代理的进度输出。

    代理将每个应用评估结果拉回本地,并在本地生成聚合报表。

    新式化 CLI 的屏幕截图,其中显示了终端中的聚合评估报告。

  9. 评估完成后,代理会自动打开聚合报表。

非交互模式 (CLI)

还可以通过直接指定命令参数来使用非交互式模式。 使用 modernize assess 命令:

使用存储库配置文件在本地评估:

modernize assess --source .github/modernize/repos.json

通过直接指定源来评估多个存储库:

modernize assess --source https://github.com/org/repo1 --source https://github.com/org/repo2

通过委托给云编码代理进行评估:

modernize assess --source .github/modernize/repos.json --delegate cloud --wait

有关详细信息,请参阅 评估 - CLI 命令

了解聚合报表

聚合报表提供跨评估应用程序的综合视图,如下所示:

仪表板

  • 项目组合健康状况概况:应用总数、需要升级的数量,以及总括阻塞问题和问题数量统计。
  • 技术分发:正在使用哪些框架以及有多少应用共享它们。
  • 工作量分配:总体迁移是一项小型或大型迁移。

建议

  • Azure服务:将当前依赖项映射到建议的Azure等效项。 跨应用的共享依赖项仅需决定一次,因此可以避免每个应用的重复工作。
  • 目标平台:指导托管方式选择,例如 Azure 容器应用 或 AKS,并揭示整合机会。
  • 升级路径:确定哪些应用需要框架升级作为先决条件,将升级工作与迁移工作分开。
  • 迁移波:按就绪情况和风险对应用进行排序,分为阶段。 方法使得在准备更复杂的应用程序的同时取得初步成功。

应用程序评估矩阵

  • 有关框架、目标平台、升级建议、问题细分(必需、潜在、可选)、工作量调整等各方面的应用程序的快速概述。
  • 指向各个应用报表的链接,以便在需要时深入查看。

批处理评估疑难解答

常见问题

存储库访问错误:

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

克隆失败:

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

评估失败:

  • 检查存储库是否包含有效的Java或.NET项目。
  • 验证是否存在生成文件,例如pom.xmlbuild.gradle*.csproj*.sln*.slnx
  • 查看控制台输出中的错误消息。

云编码代理委派问题:

  • 请确保拥有创建GitHub Actions工作流的正确权限。
  • 检查组织的 GitHub Actions 权限和配额限制。
  • 对于 .NET Framework 应用,请确保正确设置Windows运行程序配置。
  • 检查 MCP 服务器配置。

后续步骤

完成批次评估后,您可以:

继续现代化工作流:

了解详细信息:

提供反馈

您的输入非常重要! 如果对批处理评估或现代化代理有任何反馈,在 github-copilot-appmod 存储库中中创建问题,或使用 GitHub Copilot现代化反馈表单