Compartir a través de


Integración de CI/CD con Modernize CLI

Integre la CLI de Modernize en las canalizaciones de CI/CD para automatizar la modernización de aplicaciones a escala. En este artículo se muestra cómo configurar Acciones de GitHub y Azure Pipelines para ejecutar la CLI de Modernize según una programación o a petición.

La ejecución de la CLI de Modernize en una canalización de CI/CD le permite:

  • Automatice las actualizaciones de manera recurrente sin necesidad de intervención manual.
  • Estandarizar los flujos de trabajo de modernización en toda la organización.
  • Realice un seguimiento de los cambios a través de ramas dedicadas y cree artefactos.
  • Revise los resultados a través de solicitudes de incorporación de cambios, resúmenes de compilación y registros.

Las canalizaciones de ejemplo de este artículo realizan los pasos siguientes:

  1. Descargue e instale la CLI de Modernize más reciente.
  2. Ejecute modernize upgrade con un destino configurable (por ejemplo, Java 21).
  3. Confirme los cambios resultantes e insértelos en una rama dedicada.
  4. Publique un resumen de resultados y cargue los registros de la CLI como artefactos de compilación.

Prerrequisitos

Configuración de la canalización

Cree un archivo de flujo de trabajo en .github/workflows/modernize.yml en el repositorio con el siguiente contenido:

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

Detalles del flujo de trabajo

El flujo de trabajo incluye dos desencadenadores:

  • Envío manual (workflow_dispatch): ejecute el flujo de trabajo a petición desde la pestaña Acciones . Opcionalmente, especifique un destino de actualización como Java 21.
  • Programado (schedule): se ejecuta automáticamente a las 2:00 UTC diariamente. Ajuste la expresión cron para que coincida con la programación preferida.

Cada ejecución realiza los pasos siguientes:

  1. Extrae el código del repositorio.
  2. Descarga e instala la CLI de Modernize más reciente.
  3. Se ejecuta modernize upgrade con el destino especificado o por defecto en latest.
  4. Confirma los cambios e los inserta en una rama con marca de tiempo.
  5. Escribe un resumen con vínculos de rama y solicitud de incorporación de cambios en el resumen del paso Acciones de GitHub.
  6. Carga Modernizar los registros de la CLI como un artefacto de compilación para solucionar problemas.

Nota:

El flujo de trabajo se restablece .github/workflows antes de confirmar para evitar modificar accidentalmente el propio archivo de flujo de trabajo.

Ejecución de la canalización

Para desencadenar el flujo de trabajo manualmente:

  1. Vaya al repositorio en GitHub.
  2. Selecciona la pestaña Acciones.
  3. Seleccione La CLI de modernización en la lista de flujos de trabajo.
  4. Seleccione Ejecutar flujo de trabajo.
  5. Opcionalmente, escriba un destino de actualización y, a continuación, seleccione Ejecutar flujo de trabajo para confirmar.

Una vez finalizado el flujo de trabajo, revise el resumen del paso para ver los vínculos a la rama de resultados y cree una solicitud de incorporación de cambios para combinar los cambios.

Solución de problemas

Problemas comunes

Errores de autenticación:

  • Compruebe que el secreto o la GH_TOKEN variable se ha establecido correctamente con un token de acceso personal de GitHub válido.
  • Asegúrese de que el token tiene los ámbitos necesarios para el acceso a GitHub Copilot.

No se detectaron cambios:

  • La CLI de Modernize podría determinar que no se necesitan cambios para el destino especificado.
  • Revise los archivos de registro cargados para más detalles sobre la evaluación.

Errores de envío (Azure Pipelines):

  • Confirme que la identidad del servicio de compilación tiene permisos crear rama, Contribuir y Leer en el repositorio.
  • Consulte Ejecución de comandos de Git en un script para obtener instrucciones detalladas de configuración.

Modernizar errores de descarga del CLI:

  • Verifique que el corredor tiene acceso a Internet a https://github.com.
  • Compruebe si hay restricciones de proxy o firewall que podrían bloquear la descarga.

Pasos siguientes