Bagikan melalui


Integrasi CI/CD dengan Modernisasi CLI

Integrasikan Modernisasi CLI ke dalam alur CI/CD Anda untuk mengotomatiskan modernisasi aplikasi dalam skala besar. Artikel ini memperlihatkan kepada Anda cara mengonfigurasi GitHub Actions dan Azure Pipelines untuk menjalankan Modernisasi CLI sesuai jadwal atau sesuai permintaan.

Menjalankan Modernize CLI dalam alur CI/CD memungkinkan Anda untuk:

  • Mengotomatiskan peningkatan pada jadwal berulang tanpa intervensi manual.
  • Menstandarkan alur kerja modernisasi di seluruh organisasi Anda.
  • Lacak perubahan melalui cabang khusus dan hasilkan artefak.
  • Tinjau hasil melalui permintaan pull, ringkasan build, dan log.

Contoh alur dalam artikel ini melakukan langkah-langkah berikut:

  1. Unduh dan instal Modernisasi CLI terbaru.
  2. Jalankan modernize upgrade dengan target yang dapat dikonfigurasi (misalnya, Java 21).
  3. Terapkan perubahan yang dihasilkan dan push ke cabang khusus.
  4. Publikasikan ringkasan hasil dan unggah log CLI sebagai artefak build.

Prasyarat

  • Langganan GitHub Copilot: Paket Gratis, Pro, Pro+, Bisnis, atau Perusahaan. Lihat Paket copilot.
  • Token Akses Pribadi (PAT) GitHub: Buat token dan simpan sebagai rahasia repositori bernama GH_TOKEN. Lihat Mengelola token akses pribadi Anda.

Mengonfigurasi pipa

Buat file alur kerja di .github/workflows/modernize.yml repositori Anda dengan konten berikut:

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

Detail alur kerja

Alur kerja mencakup dua pemicu:

  • Pengiriman manual (workflow_dispatch): Jalankan alur kerja sesuai permintaan dari tab Tindakan . Secara opsional tentukan target peningkatan seperti Java 21.
  • Terjadwal (schedule): Jalankan secara otomatis pada pukul 02.00 UTC setiap hari. Sesuaikan ekspresi cron agar sesuai dengan jadwal pilihan Anda.

Setiap proses melakukan langkah-langkah berikut:

  1. Memeriksa kode repositori.
  2. Mengunduh dan memasang Modernize CLI versi terbaru.
  3. Menjalankan modernize upgrade dengan target yang ditentukan atau default ke latest.
  4. Menerapkan perubahan apa pun dan mendorongnya ke cabang bertanda waktu.
  5. Menulis ringkasan dengan tautan cabang dan PR ke ringkasan langkah GitHub Actions.
  6. Mengunggah log Modernize CLI sebagai artefak build untuk pemecahan masalah.

Nota

Alur kerja direset .github/workflows sebelum melakukan komit untuk menghindari modifikasi file alur kerja itu sendiri secara tidak sengaja.

Jalankan pipa

Untuk memicu alur kerja secara manual:

  1. Buka repositori Anda di GitHub.
  2. Pilih tab Tindakan.
  3. Pilih Modernisasi CLI dari daftar alur kerja.
  4. Pilih Jalankan alur kerja.
  5. Secara opsional masukkan target peningkatan, lalu pilih Jalankan alur kerja untuk mengonfirmasi.

Setelah alur kerja selesai, tinjau ringkasan langkah untuk tautan ke cabang hasil dan buat permintaan pull untuk menggabungkan perubahan.

Troubleshooting

Masalah umum

Kesalahan autentikasi:

  • GH_TOKEN Verifikasi bahwa rahasia atau variabel diatur dengan benar dengan Token Akses Pribadi GitHub yang valid.
  • Pastikan token memiliki cakupan yang diperlukan untuk akses GitHub Copilot.

Tidak ada perubahan yang terdeteksi:

  • Modernisasi CLI mungkin menentukan bahwa tidak ada perubahan yang diperlukan untuk target yang ditentukan.
  • Tinjau artefak log yang diunggah untuk detail tentang penilaian.

Kegagalan push (Azure Pipelines):

  • Konfirmasikan identitas layanan build memiliki izin Buat cabang, Kontribusi, dan Baca di repositori.
  • Lihat Menjalankan perintah Git dalam skrip untuk instruksi penyiapan terperinci.

Memodernisasi kesalahan pengunduhan CLI:

  • Verifikasi bahwa runner memiliki akses internet ke https://github.com.
  • Periksa batasan proksi atau firewall yang mungkin memblokir unduhan.

Langkah berikutnya