Поделиться через


Интеграция CI/CD с Modernize CLI

Интегрируйте Modernize CLI в ваши конвейеры CI/CD, чтобы автоматизировать модернизацию приложений на уровне масштаба. В этой статье показано, как настроить GitHub Actions и Azure Pipelines для запуска Modernize CLI по расписанию или по требованию.

Запуск интерфейса командной строки модернизации в конвейере CI/CD позволяет выполнять следующие действия.

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

Примеры конвейеров в этой статье выполняют следующие действия.

  1. Скачайте и установите последнюю версию Modernize CLI.
  2. Запустите modernize upgrade с настраиваемой целью (например, Java 21).
  3. Зафиксируйте все полученные изменения и отправьте их в выделенную ветвь.
  4. Опубликуйте сводку результатов и отправьте журналы CLI в виде артефактов сборки.

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

Настройка конвейера

Создайте в вашем репозитории файл рабочего процесса по следующему адресу .github/workflows/modernize.yml и добавьте в него следующее содержимое:

name: Modernization CLI

on:
  workflow_dispatch:
    inputs:
      upgrade_target:
        description: 'Upgrade target (e.g., Java 21)'
        required: false
        default: 'latest'
  schedule:
    # Run during off-peak hours: 2 AM UTC daily
    - cron: '0 2 * * *'

permissions:
    id-token: write
    contents: write
    actions: read

jobs:
  modernization:
    runs-on: ubuntu-latest
    env:
      GH_TOKEN: ${{ secrets.GH_TOKEN }}

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Download Modernize CLI
        run: |
          curl -fsSL https://raw.githubusercontent.com/microsoft/modernize-cli/main/scripts/install.sh | sh

      - name: Run Modernize CLI to upgrade code
        run: |
          TARGET="${{ github.event.inputs.upgrade_target }}"
          if [ -z "$TARGET" ] || [ "$TARGET" = "latest" ]; then
            modernize upgrade --no-tty
          else
            modernize upgrade "$TARGET" --no-tty
          fi

      - name: Push changes to result branch
        id: push_changes
        run: |
          BRANCH_NAME="modernize-upgrade-${{ github.event.inputs.upgrade_target || 'latest' }}-$(date +%Y%m%d-%H%M%S)"

          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"

          git add -A
          git reset .github/workflows
          git diff --cached --quiet || git commit -m "chore: apply Modernize CLI changes [skip ci]"
          git checkout -B "$BRANCH_NAME"
          git push origin "$BRANCH_NAME"

          echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_OUTPUT

      - name: Display results summary
        if: success()
        run: |
          cat >> $GITHUB_STEP_SUMMARY <<EOF
          ## Modernization Complete

          ### Branch Information
          - **Result Branch**: \`${{ steps.push_changes.outputs.BRANCH_NAME }}\`
          - **Target**: ${{ github.event.inputs.upgrade_target || 'latest' }}

          ### Links
          - [View Branch](https://github.com/${{ github.repository }}/tree/${{ steps.push_changes.outputs.BRANCH_NAME }})
          - [Create PR](https://github.com/${{ github.repository }}/compare/main...${{ steps.push_changes.outputs.BRANCH_NAME }})
          EOF

      - name: Upload Modernize CLI logs
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: modernize-logs
          path: ~/.modernize/logs/
          if-no-files-found: warn

Сведения о бизнес-процессе

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

  • Отправка вручную (workflow_dispatch): запустите рабочий процесс по запросу на вкладке "Действия ". При необходимости укажите целевой объект обновления, например Java 21.
  • Запланированное (schedule): автоматически запускается в 2:00 утра по UTC ежедневно. Настройте выражение cron в соответствии с предпочитаемым расписанием.

Каждый запуск выполняет следующие действия:

  1. Проверяет код из репозитория.
  2. Загружает и устанавливает самую последнюю версию Modernize CLI.
  3. Выполняется modernize upgrade с указанным целевым объектом или по умолчанию latest.
  4. Фиксирует все изменения и отправляет их в ветку с отметкой времени.
  5. Записывает сводку с ссылками на ветки и PR в раздел шагов GitHub Actions.
  6. Загружает журналы Modernize CLI как артефакт сборки для диагностики проблем.

Замечание

Рабочий процесс перезагружается .github/workflows перед фиксацией, чтобы избежать случайного изменения самого файла рабочего процесса.

Запуск конвейера

Чтобы активировать рабочий процесс вручную, выполните следующие действия.

  1. Перейдите в репозиторий на GitHub.
  2. Перейдите на вкладку Действия.
  3. Выберите интерфейс командной строки модернизации из списка рабочих процессов.
  4. Выберите Запуск рабочего процесса.
  5. При необходимости введите целевой объект обновления и нажмите кнопку "Выполнить рабочий процесс ", чтобы подтвердить.

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

Troubleshooting

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

Ошибки проверки подлинности:

  • Убедитесь, что GH_TOKEN секрет или переменная заданы правильно с допустимым персональным токеном доступа GitHub.
  • Убедитесь, что токен имеет необходимые области доступа для доступа к GitHub Copilot.

Никаких изменений не обнаружено:

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

Сбои push-уведомлений (Azure Pipelines):

Модернизация ошибок загрузки ИНТЕРФЕЙСА командной строки:

  • Убедитесь, что у бегуна есть доступ к Интернету https://github.com.
  • Проверьте ограничения прокси-сервера или брандмауэра, которые могут блокировать загрузку.

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