Partage via


Intégration CI/CD avec Modernize CLI

Intégrez la CLI de modernisation à vos pipelines CI/CD pour automatiser à grande échelle la modernisation des applications. Cet article vous montre comment configurer GitHub Actions et Azure Pipelines pour exécuter l’interface CLI Moderniser selon une planification ou à la demande.

Utiliser la CLI de modernisation dans un pipeline CI/CD vous permet de :

  • Automatisez les mises à niveau selon une planification périodique sans intervention manuelle.
  • Normaliser les flux de travail de modernisation au sein de votre organisation.
  • Effectuez le suivi des modifications par le biais de branches dédiées et d’artefacts de build.
  • Passez en revue les résultats par le biais de pull requests, de résumés de build et de journaux.

Les exemples de pipelines de cet article effectuent les étapes suivantes :

  1. Téléchargez et installez la dernière version de Modernize CLI.
  2. Exécuter modernize upgrade avec une cible configurable (par exemple). Java 21
  3. Validez les modifications résultantes et envoyez-les à une branche dédiée.
  4. Publiez un résumé des résultats et chargez les journaux CLI en tant qu’artefacts de build.

Prerequisites

Configurer le pipeline

Créez un fichier de flux de travail dans .github/workflows/modernize.yml votre référentiel avec le contenu suivant :

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: |
          mkdir -p "$HOME/modernize-cli"
          curl -sL https://github.com/microsoft/modernize-cli/releases/latest/download/modernize_linux_x64.tar.gz | tar -xz -C "$HOME/modernize-cli"
          chmod +x "$HOME/modernize-cli/modernize"
          echo "$HOME/modernize-cli" >> $GITHUB_PATH

      - 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

Détails du flux de travail

Le flux de travail comprend deux déclencheurs :

  • Répartition manuelle (workflow_dispatch) : exécutez le flux de travail à la demande à partir de l’onglet Actions . Spécifiez éventuellement une cible de mise à niveau telle que Java 21.
  • Planifié (schedule) : Exécutez automatiquement à 2 h UTC tous les jours. Ajustez l’expression cron pour qu’elle corresponde à votre planification préférée.

Chaque exécution suit les étapes suivantes :

  1. Extrait le code du référentiel.
  2. Télécharge et installe la dernière version du Modernize CLI.
  3. S'exécute modernize upgrade avec la cible spécifiée ou utilise par défaut latest.
  4. Valide toutes les modifications et les envoie (push) vers une branche horodatée.
  5. Rédige un récapitulatif avec des liens de branches et de pull request vers le récapitulatif de l’étape GitHub Actions.
  6. Charge les journaux de Modernize CLI comme artefact de build pour le dépannage.

Note

Avant de valider, le flux de travail est réinitialisé .github/workflows pour éviter de modifier accidentellement le fichier de flux de travail lui-même.

Exécuter le pipeline

Pour déclencher le flux de travail manuellement :

  1. Accédez à votre dépôt sur GitHub.
  2. Sélectionnez l’onglet Actions.
  3. Sélectionnez l’interface CLI de modernisation dans la liste des flux de travail.
  4. Sélectionnez Exécuter le flux de travail.
  5. Si vous le souhaitez, entrez une cible de mise à niveau, puis sélectionnez Exécuter le flux de travail pour confirmer.

Une fois le flux de travail terminé, passez en revue le résumé des étapes pour y trouver les liens vers la branche de résultat et créez une pull request pour fusionner les modifications.

Résolution des problèmes

Problèmes courants

Erreurs d’authentification :

  • Vérifiez que le secret ou la GH_TOKEN variable est correctement défini avec un jeton d’accès personnel GitHub valide.
  • Vérifiez que le jeton a les étendues requises pour l’accès à GitHub Copilot.

Aucune modification détectée :

  • L’interface CLI de modernisation peut déterminer qu’aucune modification n’est nécessaire pour la cible spécifiée.
  • Passez en revue le fichier de journal des journaux chargés pour obtenir les détails concernant l'évaluation.

Échecs de push (Azure Pipelines) :

Moderniser les erreurs de téléchargement du CLI :

  • Vérifiez que l’exécuteur dispose d’un accès Internet à https://github.com.
  • Recherchez les restrictions de proxy ou de pare-feu susceptibles de bloquer le téléchargement.

Étapes suivantes