将新式 CLI 集成到 CI/CD 管道中,以大规模自动实现应用程序现代化。 本文介绍如何将 GitHub Actions 和 Azure Pipelines 配置为按计划或按需运行新式 CLI。
在 CI/CD 管道中运行现代化 CLI 可让你:
- 在不手动干预的情况下自动执行定期升级。
- 在整个组织中标准化现代化工作流 。
- 通过专用分支和构建工件跟踪更改。
- 通过拉取请求、生成摘要和日志查看结果。
本文中的示例管道执行以下步骤:
- 下载并安装最新的现代化 CLI。
- 使用可配置的目标(例如,
modernize upgrade)运行Java 21。 - 将所有生成的更改提交并推送到专用分支。
- 发布结果摘要,并将 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 表达式以匹配首选计划。
每次运行都执行以下步骤:
- 签出存储库代码。
- 下载并安装最新的新式化 CLI。
- 使用指定的目标或默认值
modernize upgrade运行latest。 - 提交任何更改并将其推送到带时间戳的分支。
- 编写包含 GitHub Actions 步骤摘要的分支和 PR 链接的摘要。
- 将新式化 CLI 日志作为生成项目上传,以便进行故障排除。
注释
工作流在提交之前重置 .github/workflows ,以避免意外修改工作流文件本身。
运行管道
手动触发工作流:
- 访问您在 GitHub 上的存储库。
- 选择“操作”选项卡。
- 从工作流列表中选择 现代化 CLI 。
- 选择“运行工作流”。
- (可选)输入升级目标,然后选择“ 运行工作流 ”以确认。
工作流完成后,请查看包含指向结果分支链接的步骤摘要,然后创建一个合并更改的拉取请求。
故障排除
常见问题
身份验证错误:
-
GH_TOKEN使用有效的 GitHub 个人访问令牌验证机密或变量是否已正确设置。 - 确保令牌具有 GitHub Copilot 访问所需的权限范围。
未检测到任何更改:
- 新式化 CLI 可能确定指定目标不需要任何更改。
- 查看上传的日志项目,了解有关评估的详细信息。
推送失败(Azure Pipelines):
- 确认生成服务标识对存储库具有 “创建分支”、“ 参与”和 “读取 ”权限。
- 有关详细的设置说明 ,请参阅脚本中的“运行 Git”命令 。
新式化 CLI 下载错误:
- 验证运行程序是否具有 Internet 访问权限 https://github.com。
- 检查可能会阻止下载的代理或防火墙限制。