Partilhar via


Integração CI/CD com Modernize CLI

Integre a CLI Modernize nos seus pipelines CI/CD para automatizar a modernização de aplicações em larga escala. Este artigo mostra-lhe como configurar tanto o GitHub Actions como o Azure Pipelines para executar a CLI Modernize num horário ou sob demanda.

Executar CLI Modernize em uma pipeline CI/CD permite-lhe:

  • Automatizar atualizações com um calendário recorrente sem intervenção manual.
  • Padronize os fluxos de trabalho de modernização em toda a sua organização.
  • Acompanha as alterações através de ramos dedicados e constrói artefactos.
  • Revise os resultados através de pull requests, resumos de compilações e logs.

Os pipelines de exemplo neste artigo executam as seguintes etapas:

  1. Descarregue e instale a mais recente CLI do Modernize.
  2. Execute modernize upgrade com um alvo configurável (por exemplo, Java 21).
  3. Compromete quaisquer alterações resultantes e envia-as para um branch dedicado.
  4. Publique um resumo dos resultados e faça o upload de registos de CLI como artefactos de construção.

Pré-requisitos

Configurar a linha de processamento

Crie um ficheiro de fluxo de trabalho no .github/workflows/modernize.yml seu repositório com o seguinte conteúdo:

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

Detalhes do fluxo de trabalho

O fluxo de trabalho inclui dois gatilhos:

  • Despacho manual (workflow_dispatch): Execute o fluxo de trabalho a pedido a partir do separador Ações . Opcionalmente, especifique um alvo de atualização como Java 21.
  • Agendado (schedule): Funciona automaticamente às 2 da manhã UTC diariamente. Ajusta a expressão cron para corresponder ao teu horário preferido.

Cada corrida executa os seguintes passos:

  1. Verifica o código do repositório.
  2. Descarrega e instala a mais recente CLI do Modernize.
  3. Executa modernize upgrade com o alvo especificado ou utiliza latest por predefinição.
  4. Faz commit de quaisquer alterações e envia-as para um ramo com carimbo de data/hora.
  5. Escreve um resumo dos passos do GitHub Actions com links para a branch e o PR.
  6. Carrega registos do Modernize CLI como artefato de build para diagnóstico de problemas.

Observação

O fluxo de trabalho é redefinido .github/workflows antes da confirmação para evitar modificar acidentalmente o próprio ficheiro do fluxo de trabalho.

Executar a linha de processamento

Para ativar o fluxo de trabalho manualmente:

  1. Vai ao teu repositório no GitHub.
  2. Selecione o separador Ações.
  3. Selecione CLI de Modernização na lista de workflow.
  4. Selecione Executar fluxo de trabalho.
  5. Opcionalmente, introduza um alvo de atualização e depois selecione Executar fluxo de trabalho para confirmar.

Depois do fluxo de trabalho terminar, reveja o resumo dos passos para ligações para o ramo de resultados e crie um pull request para integrar as alterações.

Troubleshooting

Problemas comuns

Erros de autenticação:

  • Verifique se o GH_TOKEN segredo ou variável está corretamente definido com um GitHub Personal Access Token válido.
  • Garante que o token tem os escopos necessários para o acesso ao GitHub Copilot.

Nenhuma alteração detetada:

  • O CLI Modernize pode determinar que não são necessárias alterações para o alvo especificado.
  • Revise os registos de artefacto carregados para obter detalhes sobre a avaliação.

Falhas no push (Azure Pipelines):

  • Confirme que a identidade do serviço de build tem a permissão de Criar ramo, Contribuir e Ler no repositório.
  • Consulte os comandos Run Git num script para instruções detalhadas de configuração.

Erros de download da Modernize CLI:

  • Verifique se o runner tem acesso à internet a https://github.com.
  • Verifique se existem restrições de proxy ou firewall que possam bloquear o download.

Passos seguintes