다음을 통해 공유


Modernize CLI와 CI/CD 통합

CLI 현대화를 CI/CD 파이프라인에 통합하여 대규모 애플리케이션 현대화를 자동화합니다. 이 문서에서는 일정 또는 요청 시 CLI 현대화를 실행하도록 GitHub Actions와 Azure Pipelines를 모두 구성하는 방법을 보여 줍니다.

CI/CD 파이프라인에서 CLI 현대화를 실행하면 다음을 수행할 수 있습니다.

  • 수동 개입 없이 되풀이 일정에 따라 업그레이드를 자동화합니다.
  • 조직 전체에서 현대화 워크플로를 표준화합니다.
  • 전용 분기를 통해 변경 내용을 추적하고 아티팩트를 빌드하십시오.
  • 끌어오기 요청, 빌드 요약 및 로그를 통해 결과를 검토합니다.

이 문서의 샘플 파이프라인은 다음 단계를 수행합니다.

  1. 최신 현대화 CLI를 다운로드하고 설치합니다.
  2. modernize upgrade를 구성 가능한 대상(예: Java 21)으로 실행합니다.
  3. 결과 변경 내용을 커밋하고 전용 분기에 푸시합니다.
  4. 결과 요약을 게시하고 CLI 로그를 빌드 아티팩트로 업로드합니다.

사전 요구 사항

파이프라인 구성

다음 콘텐츠를 사용하여 리포지토리에 .github/workflows/modernize.yml 워크플로 파일을 만듭니다.

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

워크플로 세부 정보

워크플로에는 다음 두 개의 트리거가 포함됩니다.

  • 수동 디스패치 (workflow_dispatch): 작업 탭에서 요청 시 워크플로를 실행 합니다 . 필요에 따라 업그레이드 대상(예: .) Java 21을 지정합니다.
  • 예약됨 (schedule): 매일 오전 2시(UTC)에 자동으로 실행됩니다. 원하는 일정에 맞게 cron 식을 조정합니다.

각 실행은 다음 단계를 수행합니다.

  1. 리포지토리 코드를 체크 아웃합니다.
  2. 최신 현대화 CLI를 다운로드하고 설치합니다.
  3. 지정된 대상 또는 기본값으로 modernize upgrade을 실행하거나 latest을 실행합니다.
  4. 변경 내용을 커밋하고 타임스탬프가 있는 분기에 푸시합니다.
  5. GitHub Actions 단계 요약에 분기 및 PR 링크가 포함된 요약을 작성합니다.
  6. 문제 해결을 위한 빌드 아티팩트로 CLI 현대화 로그를 업로드합니다.

메모

워크플로 파일 자체를 실수로 수정하지 않도록 커밋하기 전에 워크플로가 다시 설정 .github/workflows 됩니다.

파이프라인 실행

워크플로를 수동으로 트리거하려면 다음을 수행합니다.

  1. GitHub의 리포지토리로 이동합니다.
  2. 작업 탭을 선택합니다.
  3. 워크플로 목록에서 현대화 CLI 를 선택합니다.
  4. 워크플로 실행을 선택합니다.
  5. 필요에 따라 업그레이드 대상을 입력한 다음 워크플로 실행을 선택하여 확인합니다.

워크플로가 완료되면 결과 분기에 대한 링크에 대한 단계 요약을 검토하고 변경 내용을 병합하기 위한 끌어오기 요청을 만듭니다.

Troubleshooting

일반적인 문제

인증 오류:

  • GH_TOKEN 비밀 또는 변수가 유효한 GitHub 개인 액세스 토큰으로 올바르게 설정되었는지 확인합니다.
  • 토큰에 GitHub Copilot 액세스에 필요한 범위가 있는지 확인합니다.

변경 내용이 검색되지 않았습니다.

  • 현대화 CLI는 지정된 대상에 대해 변경이 필요하지 않음을 확인할 수 있습니다.
  • 업로드된 로그 파일에서 평가에 대한 세부 정보를 확인하세요.

푸시 실패 (Azure Pipelines):

  • 빌드 서비스 ID에 리포지토리에 대한 만들기 분기, 참가읽기 권한이 있는지 확인합니다.
  • 자세한 설정 지침은 스크립트에서 Git 명령 실행을 참조하세요.

CLI 다운로드 오류 처리 현대화:

  • 실행기가 인터넷에 액세스할 수 있는지 확인합니다 https://github.com.
  • 다운로드를 차단할 수 있는 프록시 또는 방화벽 제한을 확인합니다.

다음 단계