Condividi tramite


Integrazione CI/CD con Modernize CLI

Integra la Modernize CLI nelle pipeline CI/CD per automatizzare la modernizzazione delle applicazioni. Questo articolo illustra come configurare sia GitHub Actions che Azure Pipelines per eseguire il Modernize CLI a intervalli programmati o a richiesta.

Eseguire la CLI di Modernize in una pipeline CI/CD consente di:

  • Automatizzare gli aggiornamenti in base a una pianificazione ricorrente senza intervento manuale.
  • Standardizzare i flussi di lavoro di modernizzazione nell'organizzazione.
  • Tenere traccia delle modifiche tramite rami dedicati e artefatti di build.
  • Esaminare i risultati tramite richieste pull, riepiloghi di compilazione e log.

Le pipeline di esempio in questo articolo eseguono i passaggi seguenti:

  1. Scaricare e installare la versione più recente dell'interfaccia della riga di comando di Modernize.
  2. Eseguire modernize upgrade con una destinazione configurabile , ad esempio Java 21.
  3. Eseguire il commit di tutte le modifiche risultanti e fare il push in un ramo dedicato.
  4. Pubblicare un riepilogo dei risultati e caricare i log dell'interfaccia della riga di comando come artefatti di compilazione.

Prerequisiti

  • Sottoscrizione di GitHub Copilot: piano Gratuito, Pro, Pro+, Business o Enterprise. Vedere Piani di Copilot.
  • Un token di accesso personale di GitHub: creare un token e archiviarlo come segreto del repository denominato GH_TOKEN. Vedere Gestione dei token di accesso personali.

Configurare la pipeline

Crea un file di flusso di lavoro in .github/workflows/modernize.yml nel tuo repository con il contenuto seguente:

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

Dettagli flusso di lavoro

Il flusso di lavoro include due trigger:

  • Invio manuale (workflow_dispatch): eseguire il flusso di lavoro su richiesta dalla scheda Azioni . Specificare facoltativamente una destinazione di aggiornamento, Java 21ad esempio .
  • Pianificato (schedule): viene eseguito automaticamente alle 2:00 UTC giornaliere. Modificare l'espressione cron in modo che corrisponda alla pianificazione preferita.

Ogni esecuzione compie i passaggi seguenti:

  1. Estrae il codice del repository.
  2. Scarica e installa la versione più recente dell'interfaccia della riga di comando di Modernize.
  3. Esegue modernize upgrade con la destinazione specificata o ricorre a latest.
  4. Esegue il commit delle modifiche e le inserisce in un branch con timestamp.
  5. Scrive un riepilogo con collegamenti al branch e alle pull request per il riepilogo dei passaggi di GitHub Actions.
  6. Carica i log di Modernize CLI come artefatto di build per la risoluzione dei problemi.

Annotazioni

Il flusso di lavoro viene .github/workflows reimpostato prima del commit per evitare di modificare accidentalmente il file del flusso di lavoro stesso.

Esegui la pipeline

Per attivare manualmente il flusso di lavoro:

  1. Vai al tuo repository su GitHub.
  2. Seleziona la scheda Azioni.
  3. Selezionare Modernization CLI nell'elenco dei flussi di lavoro.
  4. Selezionare Esegui flusso di lavoro.
  5. Facoltativamente, immettere una destinazione di aggiornamento e quindi selezionare Esegui flusso di lavoro per confermare.

Al termine del flusso di lavoro, esaminare il riepilogo dei passaggi per i collegamenti al ramo dei risultati e creare una richiesta pull per unire le modifiche.

Risoluzione dei problemi

Problemi comuni

Errori di autenticazione:

  • Verificare che il segreto o la GH_TOKEN variabile sia impostata correttamente con un token di accesso personale GitHub valido.
  • Assicurarsi che il token abbia gli ambiti necessari per l'accesso a GitHub Copilot.

Nessuna modifica rilevata:

  • L'interfaccia della riga di comando di Modernize potrebbe determinare che non sono necessarie modifiche per la destinazione specificata.
  • Esaminare il file dei log caricati per informazioni dettagliate sulla valutazione.

Errori di push (Azure Pipelines):

  • Verificare che l'identità del servizio di compilazione disponga delle autorizzazioni Create Branch, Contribute e Read nel repository.
  • Per istruzioni dettagliate sull'installazione, vedere Eseguire comandi Git in uno script .

Modernizzare la gestione degli errori di download dell'interfaccia della riga di comando:

  • Verificare che il runner disponga dell'accesso a Internet a https://github.com.
  • Verificare la presenza di restrizioni del proxy o del firewall che potrebbero bloccare il download.

Passaggi successivi