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

Пакетное обновление позволяет одновременно применять согласованные планы модернизации в нескольких репозиториях. В этой статье показано, как эффективно обновлять несколько приложений в масштабе предприятия.

С помощью пакетного обновления можно:

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

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

  • Согласованное выполнение:

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

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

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

Это важно

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

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

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

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

Подсказка

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

Агент модернизации автоматически обнаруживает repos.json файл .github/modernize/repos.json, когда вы выбираете опцию Из файла конфигурации в интерактивном режиме. Можно также указать пользовательский путь.

Выбор режима выполнения

Пакетное обновление поддерживает два режима выполнения и два метода взаимодействия:

Режимы выполнения

Локальное выполнение

  • Лучше всего: тестирование, небольшие наборы репозиториев (1–5 репозиториев) или при желании локального управления.
  • Как это работает: обрабатывает репозитории последовательно на локальном компьютере.
  • Требуется настройка: нет никаких предварительных требований.
  • Поддерживает: как URL Git, так и локальные репозитории.

Делегирование агента кодирования облака

  • Лучше всего: Операции корпоративного масштаба, крупные портфели (5+ репозиториев) или параллельные обработки.
  • Как это работает: отправляет задачи облачным агентам кодирования GitHub для параллельного выполнения в облаке.
  • Требуется настройка: конфигурация сервера MCP в каждом репозитории (настроенная во время установки).
  • Supports: только репозитории с URL-адресами GitHub (github.com). Локальные пути и поставщики, отличные от GitHub, не поддерживаются.

Это важно

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

Подсказка

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

Методы взаимодействия

Интерактивный режим (TUI)

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

Неинтерактивный режим (CLI/headless)

  • Система основана на командной строке и полностью автоматизированная.
  • Оптимальный выбор для конвейеров CI/CD и автоматизации.
  • Поддерживает как локальное, так и облачное выполнение с флагом --delegate cloud .

Замечание

Вы можете объединить любой режим выполнения с любым методом взаимодействия. Рассмотрим пример.

  • modernize → выберите "Обновить" (интерактивный, локальный)
  • modernize → выберите "Обновить" → "Делегировать облачным агентам" (интерактивные, облачные)
  • modernize upgrade "Java 21" --source ./repos.json (неинтерактивный, локальный)
  • modernize upgrade "Java 21" --source ./repos.json --delegate cloud (неинтерактивная, облачная)

Как работает пакетное обновление

Рабочий процесс пакетного обновления:

  1. Обнаружение языка: автоматически обнаруживает язык проекта (Java или .NET) в первом репозитории.
  2. Создание плана: создает план обновления на основе запроса или использует последние версии LTS.
  3. Выполнение: Применяет обновление к каждому репозиторию.
  4. Проверка: создает и проверяет изменения для каждого репозитория.

Запуск пакетного обновления

После настройки репозиториев и выбора режима выполнения запустите пакетное обновление.

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

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

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

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

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

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

    Подсказка

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

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

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

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

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

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

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

  7. Введите целевой запрос обновления (например, Java 21 или .NET 10) или нажмите клавишу Enter, чтобы принять значение по умолчанию (последняя версия LTS).

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

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

    Скриншот Modernize CLI, показывающий прогресс обновления каждого репозитория в терминале.

Интерактивный режим (делегирование в агенты облачного программирования)

Предварительные требования. Настройка сервера MCP

Перед запуском обновления настройте сервер GitHub Copilot Modernization MCP в каждом репозитории.

Для Java-приложений добавьте эту конфигурацию в раздел "Агент кодирования облака" параметров репозитория:

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

Screenshot GitHub с областью параметров агента кодирования репозитория с выделенным разделом конфигурации MCP.

Шаги

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

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

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

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

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

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

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

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

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

    Снимок экрана Modernize CLI, на котором показан пункт меню

  7. Введите целевой запрос обновления (например, Java 21) или нажмите клавишу Enter, чтобы принять значение по умолчанию.

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

    • Создает планы обновления для каждого репозитория.

    • Отправляет задание агента кодирования облака для каждого репозитория.

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

    • Отображает идентификаторы заданий и URL-адреса PR для каждого репозитория.

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

    • Делегирует задачи агенту HQ для параллельного выполнения.

      Screenshot GitHub с областью

    • Отслеживает ход выполнения каждой отдельной задачи в режиме реального времени.

      Screeenshot GitHub, показывающий панель

    • Отображает сводку по обновлению для каждой завершенной задачи.

      Screenshot GitHub с сводкой по обновлению для отдельных задач агента программирования облака.

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

Просмотр результатов

После завершения пакетного обновления:

  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"
    

Устранение неполадок пакетных обновлений

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

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

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

Ошибки несоответствия языка:

  • Убедитесь, что все репозитории в repos.json используют тот же язык (Java или .NET).
  • Создайте отдельные пакетные операции для разных языков.

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

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

Сбои сборки после обновления:

  • Просмотрите сообщения об ошибках сборки в агрегированном отчете.
  • Проверьте, нужно ли обновить другие зависимости.
  • Проверьте совместимость сторонних библиотек с новой версией.

Сбои отдельных репозиторий:

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

Сбои агента программирования в облаке:

  • Проверьте права доступа и ограничения квоты для GitHub Actions.
  • Для платформы .NET убедитесь, что конфигурация запуска Windows настроена правильно.

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

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

Продолжить улучшение:

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

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

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