通过


CI/CD 与新式化 CLI 的集成

将新式 CLI 集成到 CI/CD 管道中,以大规模自动实现应用程序现代化。 本文介绍如何将 GitHub Actions 和 Azure Pipelines 配置为按计划或按需运行新式 CLI。

在 CI/CD 管道中运行现代化 CLI 可让你:

  • 在不手动干预的情况下自动执行定期升级
  • 在整个组织中标准化现代化工作流
  • 通过专用分支和构建工件跟踪更改
  • 通过拉取请求、生成摘要和日志查看结果

本文中的示例管道执行以下步骤:

  1. 下载并安装最新的现代化 CLI。
  2. 使用可配置的目标(例如,modernize upgrade)运行Java 21
  3. 将所有生成的更改提交并推送到专用分支。
  4. 发布结果摘要,并将 CLI 日志作为生成项目上传。

先决条件

  • GitHub Copilot 订阅:免费、Pro、Pro+、Business 或企业计划。 请参阅 Copilot 计划
  • GitHub 个人访问令牌(PAT):创建令牌并将其存储为名为 GH_TOKEN的存储库机密。 请参阅 “管理个人访问令牌”。

配置流水线

在存储库中创建包含以下内容的工作流文件 .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):每天世界标准时间 (UTC) 凌晨 2 点自动执行。 调整 cron 表达式以匹配首选计划。

每次运行都执行以下步骤:

  1. 签出存储库代码。
  2. 下载并安装最新的新式化 CLI。
  3. 使用指定的目标或默认值modernize upgrade运行 latest
  4. 提交任何更改并将其推送到带时间戳的分支。
  5. 编写包含 GitHub Actions 步骤摘要的分支和 PR 链接的摘要。
  6. 将新式化 CLI 日志作为生成项目上传,以便进行故障排除。

注释

工作流在提交之前重置 .github/workflows ,以避免意外修改工作流文件本身。

运行管道

手动触发工作流:

  1. 访问您在 GitHub 上的存储库。
  2. 选择“操作”选项卡。
  3. 从工作流列表中选择 现代化 CLI
  4. 选择“运行工作流”。
  5. (可选)输入升级目标,然后选择“ 运行工作流 ”以确认。

工作流完成后,请查看包含指向结果分支链接的步骤摘要,然后创建一个合并更改的拉取请求。

故障排除

常见问题

身份验证错误:

  • GH_TOKEN使用有效的 GitHub 个人访问令牌验证机密或变量是否已正确设置。
  • 确保令牌具有 GitHub Copilot 访问所需的权限范围。

未检测到任何更改:

  • 新式化 CLI 可能确定指定目标不需要任何更改。
  • 查看上传的日志项目,了解有关评估的详细信息。

推送失败(Azure Pipelines):

新式化 CLI 下载错误:

  • 验证运行程序是否具有 Internet 访问权限 https://github.com
  • 检查可能会阻止下载的代理或防火墙限制。

后续步骤