Пакетная оценка с помощью агента модернизации GitHub Copilot

Пакетная оценка позволяет анализировать портфель приложений Java, .NET и JavaScript/TypeScript в одном запуске. Вы получаете комплексное представление о ландшафте модернизации в приложениях. В этой статье описывается процесс эффективной оценки нескольких репозиториев. Процесс поддерживает как репозитории с одним языком, так и mono-repos, которые содержат сочетание проектов Java, .NET и JavaScript/TypeScript.

Каждое приложение анализируется по двум дополнительным трекам. Поиск проблем находит проблемы, которые нужно исправить. Сведения о кодовой базе описывают, как устроено приложение, чтобы вы могли учитывать это при планировании.

Проверка проблем

Проверка проблем обнаруживает проблемы модернизации и безопасности в трех доменах. Покрытие языка отличается по домену:

  • Обновление — анализ версий среды выполнения и платформы. Охватывает Java и .NET.
  • Готовность к облаку — соответствие целевой платформе Azure и проблемы миграции. Охватывает Java и .NET.
  • Безопасность — сканирование уязвимостей CVE среди прямых и транзитивных зависимостей, а также проблемы безопасности CWE в соответствии с ISO 5055. Только Java в настоящее время; поддержка .NET и JavaScript/TypeScript запланирована.

Аналитика кодовой базы

Аналитика Codebase показывает, как устроено каждое приложение. Они создаются для проектов Java, .NET и JavaScript/TypeScript. Они появляются, когда в настройке «Охват анализа» выбран параметр Полный анализ.

  • Архитектура — диаграмма высокоуровневой архитектуры со слоями, границами модулей, топологией среды выполнения и точками входа.
  • Контракты API — интерфейсы REST, gRPC, очередей сообщений и вебхуков, которые приложение предоставляет или использует. Оценивает область влияния интеграции перед миграцией.
  • Конфигурация — файлы конфигурации, переменные среды, флаги компонентов, строки подключения и секреты. Обеспечивает миграцию секретов и конфигураций в Azure Key Vault и Конфигурация приложений Azure.
  • Бизнес-рабочие процессы — комплексные функциональные потоки, восстановленные из кода (например, заказ → резервирования → выполнение → оплаты). Служит основой для определения объёма регрессионного тестирования и взаимодействия с заинтересованными сторонами.
  • Зависимости — прямые и транзитивные библиотеки, пакеты SDK и драйверы с фиксированными версиями. Передаёт сопоставление со службами Azure и выявляет закрепления на версиях EOL или бета-версиях.
  • Модель данных — базы данных, схемы, ключевые сущности и связи из сопоставлений ORM и DDL. Управляет планированием миграции уровня данных.

Отчеты

Пакетная оценка особенно важна для планирования миграции, так как она позволяет эффективно оценивать готовность и требования различных приложений одновременно. С помощью пакетной оценки можно одновременно оценивать различные репозитории и получать подробные отчеты об оценке для каждого приложения. Он создает два типа отчетов для поддержки планирования миграции:

  • Отчет о репозитории. Предоставляет подробные сведения о двух аспектах, определенных на уровне отдельного репозитория.
  • отчет Aggregated: представляет общую перспективу всех оцененных приложений, предлагая сводную информацию, рекомендации по службам Azure, целевым платформам, путям обновления, стратегиям миграции и волнам миграции. Кроме того, агрегированный отчет включает сочетания клавиш для простого доступа к каждому отчету репозитория.

Пакетная оценка обеспечивает следующие преимущества:

  • Видимость между приложениями:

    • Агрегированные отчеты: получение комплексного представления между приложениями.
    • Анализ между репозиториями: определение общих шаблонов и зависимостей между приложениями.
    • Инсайты о приоритизации: Понимание, какие приложения нуждаются в немедленном внимании.
  • Масштабирование и эффективность:

    • Параллельная обработка: используйте облачные агенты для одновременной обработки нескольких репозиториев.
    • Автоматизированные рабочие процессы: интеграция с конвейерами CI/CD для запланированной оценки.
    • Экономия времени: сокращение общего времени оценки с недель до часов.

Необходимые условия

Настройка репозиториев

Агент модернизации поддерживает несколько способов указания репозиториев, которые требуется оценить:

  • Текущая папка: оценка проекта в текущем рабочем каталоге.
  • Ввод вручную. Введите пути к локальному каталогу или удаленные URL-адреса Git напрямую.
  • Файл конфигурации репозитория: используйте файл конфигурации 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 URL-адрес клонирования Git в формате HTTPS или SSH. Одно из url или path
path Абсолютный путь к локальному каталогу. Одно из url или path
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, когда вы выбираете опцию Из файла конфигурации в интерактивном режиме. Можно также указать пользовательский путь.

Запуск пакетной оценки

Доступны два режима выполнения:

  • Локальное выполнение: агент модернизации обрабатывает репозитории друг за другом на локальном компьютере. Этот режим лучше всего подходит для меньшего набора приложений или для первоначального тестирования. Поддерживает репозитории URL-адреса Git и локального пути.
  • Делегирование облачным агентам: Агент модернизации передаёт задачи облачным агентам GitHub Copilot для параллельной обработки в облаке. Этот режим быстрее выполняет задачи в сценариях с несколькими репозиториями.

Это важно

Для делегирования облачным агентам требуется, чтобы у репозиториев были URL-адреса репозиториев GitHub (github.com). Репозитории локальных путей и другие поставщики, кроме GitHub (такие как GitLab, Azure DevOps), не поддерживаются для делегирования в облачной среде. Используйте локальное выполнение для этих репозиториев.

Подсказка

С помощью делегирования агента облака можно включить параллельное выполнение во всех репозиториях. Такой подход значительно сокращает общее время оценки для крупных портфелей.

Интерактивный режим (оценка локально)

  1. Запустите агент модернизации:

    modernize
    
  2. Выберите "Оценка " в главном меню.

    Снимок экрана Modernize CLI, на котором показано главное меню с пунктом Assess в терминале.

  3. Выберите способ указания целевых репозиториев. Выберите из файла конфигурации , чтобы использовать repos.json файл.

    Снимок экрана Modernize CLI с отображением выбора исходного типа в терминале.

    Подсказка

    Вы также можете выбрать Ручной ввод, чтобы напрямую ввести локальные пути или URL-адреса удаленных Git-репозиториев, или текущую папку, чтобы оценить проект в текущем каталоге.

  4. repos.json Если файл обнаружен в расположении по умолчанию, агент автоматически заполняет его. В противном случае введите путь к файлу конфигурации и нажмите клавишу ВВОД.

  5. По умолчанию выбраны все репозитории. Отмените выбор любых репозиториев, которые вы хотите пропустить, а затем нажмите клавишу ВВОД , чтобы подтвердить выбор.

    • Используйте клавиши со стрелками для навигации и нажмите пробел для переключения отдельных репозиториев.

    Снимок экрана Modernize CLI, показывающий список репозиториев в терминале.

  6. Выберите домены оценки для анализа. Upgrade и Cloud Readiness запускаются в Java и .NET проектах в репозитории. Security по умолчанию не установлен и доступен только для проектов Java; установите этот флажок, чтобы выполнить поиск уязвимостей CVE и проблем CWE в соответствии с ISO 5055.

    Скриншот Modernize CLI, на котором показан выбор области оценки в терминале.

  7. Просмотрите и настройте параметры оценки. На странице конфигурации показаны параметры, сгруппированные по языку и домену:

    • Общее / охват анализа:
      • Только проблемы (по умолчанию): выявляет проблемы, связанные с модернизацией и безопасностью, в исходном коде. Самый быстрый вариант.
      • Полный анализ: обнаруживает проблемы и дополнительно создает аналитические сведения о базе кода в шести аспектах приложения — архитектура, контракты API, конфигурация, бизнес-рабочие процессы, зависимости и модель данных. Занимает больше времени, чем анализ только проблем.
    • Java / UPGRADE: целевая среда выполнения (OpenJDK 11, 17, 21 или 25).
    • Java / CLOUD READINESS: целевые вычислительные службы, целевая операционная система и контейнеризация.
    • Java / SECURITY: минимальная серьезность CVE (low, medium, high, critical; по умолчанию high). Более низкие значения серьезности включают больше результатов. (домен безопасности доступен только для Java.)
    • .NET / UPGRADE: Целевая платформа (.NET 8, 9 или 10).
    • .NET / CLOUD READINESS: целевые вычислительные службы.

    Используйте клавиши со стрелками для перехода, нажмите клавишу ВВОД , чтобы изменить значение, или нажмите кнопку "Продолжить ", чтобы продолжить работу с текущими параметрами.

    Снимок экрана Modernize CLI, на котором показана страница конфигурации оценки в терминале.

    Подсказка

    Рекомендуемые значения по умолчанию работают для большинства сценариев. Эти параметры необходимо изменить только в том случае, если у вас есть определенные требования, например для конкретной версии JDK, конкретной Azure вычислительной службы или другого порогового значения серьезности CVE.

  8. Выберите режим выполнения. Выберите Оценить локально.

    Снимок экрана Modernize CLI, показывающий меню режима оценки в терминале.

  9. Введите выходной путь для результатов оценки или нажмите клавишу ВВОД , чтобы принять значение по умолчанию.

  10. Агент автоматически:

    • Клонирует удаленные репозитории (локальные репозитории используются напрямую).

    • Выполняет оценку для каждого репозитория последовательно.

    • Создает отдельные отчеты об оценке.

      Снимок экрана Modernize CLI, на котором показан вывод генерации индивидуального отчета оценки в терминале.

    • Создает агрегированный отчет.

      Скриншот Modernize CLI, на котором отображены результаты генерации агрегированного отчёта в терминале.

  11. После завершения оценки агент автоматически открывает агрегированный отчет.

    Скриншот Modernize 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, на котором показаны настройки репозитория с отключенной настройкой

СЕРВЕР MCP

Настройте MCP-сервер модернизации GitHub Copilot в разделе Cloud agent настроек репозитория, как показано в следующем примере:

{
  "mcpServers": {
   "AppModDotNetUpgrade": {
        "type": "local",
        "command": "dotnet",
        "args": [
          "dnx",
          "Microsoft.GitHubCopilot.Modernization.Mcp",
          "--prerelease",
          "--yes",
          "--source",
          "https://api.nuget.org/v3/index.json"
        ],
        "env": {
          "APPMOD_CALLER_TYPE": "modernize-cli"
        },
        "tools": ["*"]
    }
  }
}

Настройка для приложений Java

Настройте сервер MCP GitHub Copilot Modernization в разделе Cloud agent настроек репозитория, как показано в следующем примере:

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

Снимок экрана GitHub, на котором показаны настройки облачного агента репозитория с выделенным разделом конфигурации MCP.

Шаги

Интерактивный процесс делегирования в облако идентичен процессу локальной оценки вплоть до этапов выбора источника, репозитория, домена и настройки. Единственное различие заключается в выборе режима выполнения и о том, что происходит после этого.

  1. Запустите агент модернизации:

    modernize
    
  2. Выберите "Оценка " в главном меню, выберите источник (файл конфигурации, входные данные вручную или текущую папку), выберите репозитории, выберите домены оценки и просмотрите конфигурацию. Эти шаги выполняются точно так же, как описано в разделе Интерактивный режим (локальная оценка).

  3. Выберите режим выполнения. Выберите Делегирование облачным агентам.

    Снимок экрана Modernize CLI, на котором показано меню Assess с выбранным параметром «Делегировать облачным агентам».

  4. Введите выходной путь для результатов оценки или нажмите клавишу ВВОД , чтобы принять значение по умолчанию.

  5. Агент автоматически делегирует задачи оценки для каждого репозитория облачным агентам и выполняет их в облаке параллельно.

    Снимок экрана Modernize CLI, показывающий в терминале вывод о ходе делегирования оценки облачным агентам.

    Агент извлекает результаты оценки для каждого приложения в локальную среду и создает объединенный отчет на месте.

    Снимок экрана Modernize CLI с отображением агрегирования отчетов об оценке в терминале.

  6. После завершения оценки агент автоматически открывает агрегированный отчет.

Неинтерактивный режим (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.

Сквозный поток:

  1. Скачайте стартовый шаблон repos.json из Миграция Azure. Миграция Azure создает JSON-файл, охватывающий приложения, выбранные для оценки модернизации. Файл уже содержит записи apps[] и блок output, указывающий на проект Миграция Azure.

  2. Заполните URL-адреса репозитория. Измените каждую запись repos[] в скачанный файл, чтобы добавить URL-адрес репозитория GitHub для приложения. Сохраните блоки apps[] и output, так как они были созданы Миграция Azure — эти блоки управляют отправкой.

  3. Запустите пакетную оценку. Выполните оценку локально или делегируя облачным агентам, выполнив описанные выше действия. Оба режима выполнения соблюдают конфигурацию вывода Миграция Azure.

  4. Отчеты отправляются автоматически. По завершении оценки агент модернизации отправляет отчет каждого приложения обратно в проект Миграция Azure. Дополнительный флаг CLI не требуется — параметр output.type в файле repos.json управляет загрузкой.

Общие сведения об агрегированном отчете

Объединенный отчет предоставляет комплексное представление для оцененных приложений следующим образом:

Панель мониторинга

  • Общий обзор состояния портфеля: общее количество приложений, сколько требуют обновления, а также общее количество блокировок и проблем.
  • Распределение технологий: какие платформы используются и сколько приложений совместно используются.
  • Распределение усилий: является ли общая миграция небольшой или большой задачей.

Рекомендации

  • Azure Services: сопоставляет текущие зависимости с рекомендуемыми эквивалентами Azure. Общие зависимости между приложениями решаются один раз, поэтому вы избегаете повторной работы для каждого приложения.
  • Target Platform: помогает выбрать вариант размещения, например между Контейнеры приложений Azure и AKS, а также выявляет возможности для консолидации.
  • Путь обновления: определяет, какие приложения нуждаются в обновлении платформы в качестве обязательного условия, разделяя работу обновления от работы миграции.
  • Cost Estimate: оценивает затраты в Azure на запуск каждого приложения в рекомендованной целевой среде, чтобы вы могли учитывать эти расходы при расстановке приоритетов.
  • Стратегии миграции: рекомендует подход к миграции для каждого приложения — например, Replatform для сценариев переноса и адаптации или Rearchitect для более глубокого рефакторинга, чтобы для каждого приложения была выбрана стратегия, соответствующая степени его готовности.
  • Волны миграции: распределение приложений по степени готовности и уровню риска по этапам (например, волна 1 — быстрые результаты, волна 2 — основное облако, волна 3 — долгосрочные инициативы). Этот подход позволяет ранним выигрышам, а более трудные приложения подготавливаются параллельно.

Матрица оценки приложений

  • Краткий обзор каждого приложения по аспектам платформы, целевой платформы, рекомендации по обновлению, разбивка проблем (обязательный, потенциальный, необязательный), размер усилий и многое другое.
  • Ссылки на отдельные отчеты приложений для детализации при необходимости.

Устранение неполадок пакетного анализа

Распространенные проблемы

Ошибки доступа к репозиторию:

  • Проверьте проверку подлинности GitHub с помощью gh auth status.
  • Убедитесь, что у вас есть доступ ко всем репозиториям, перечисленным в repos.json.

Неудачи при клонировании:

  • Проверьте правильность и доступность URL-адресов repos.json репозитория.
  • Убедитесь, что у вас есть правильные разрешения на доступ для всех репозиториев.
  • Проверьте параметры сетевого подключения и VPN.

Сбои оценки:

  • Проверьте, содержит ли репозиторий допустимые проекты Java, .NET или JavaScript/TypeScript.
  • Убедитесь, что существуют файлы сборки, например pom.xml, build.gradle, , *.csproj*.sln, *.slnxили package.json.
  • Просмотрите сообщения об ошибках в выходных данных консоли. Некритические предупреждения (например, отсутствующие файлы сборки в подмодуле) теперь отображаются непосредственно в выводе CLI — ознакомьтесь с ними, прежде чем считать отчет окончательным.

Проблемы делегирования облачных агентов:

  • Делегирование облачного агента поддерживает только URL-адреса репозиториев https://github.com/.... Локальные пути и провайдеры, отличные от GitHub (GitLab, Azure DevOps), сразу отклоняются с понятным сообщением об ошибке. Используйте локальное выполнение для этих репозиториев.
  • Убедитесь, что у вас есть правильные разрешения на создание рабочих процессов GitHub Actions.
  • Проверьте GitHub Actions разрешения и квоты для вашей организации.
  • Для приложений .NET Framework убедитесь, что конфигурация запуска Windows настроена правильно.
  • Проверьте конфигурацию сервера MCP.

Дальнейшие действия

После завершения пакетной оценки можно:

Продолжить рабочий процесс модернизации:

Дополнительные сведения:

Предоставьте отзыв

Ваши входные данные важны! Если у вас есть отзывы о пакетной оценке или агенте модернизации, создайте запрос в репозитории github-copilot-appmod или используйте форму обратной связи по модернизации GitHub Copilot.