Modernize CLI を CI/CD パイプラインに統合して、大規模なアプリケーションの最新化を自動化します。 この記事では、スケジュールまたはオンデマンドで Modernize CLI を実行するように GitHub Actions と Azure Pipelines の両方を構成する方法について説明します。
CI/CD パイプラインで Modernize CLI を実行すると、次のことが可能になります。
- 手動による介入なしで、定期的なスケジュールでアップグレードを自動化します。
- 組織全体の最新化ワークフローを標準化します。
- 専用ブランチを使用して変更を追跡し、成果物をビルドします。
- プル要求、ビルドの概要、ログを使用して結果を確認します。
この記事のサンプル パイプラインでは、次の手順を実行します。
- 最新の Modernize CLI をダウンロードしてインストールします。
- 構成可能なターゲット (たとえば、
modernize upgrade) でJava 21を実行します。 - 結果の変更をコミットし、専用ブランチにプッシュします。
- 結果の概要を発行し、CLI ログをビルド成果物としてアップロードします。
前提条件
- GitHub Copilot サブスクリプション: 無料、Pro、Pro+、Business、または Enterprise プラン。 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
ワークフローの詳細
ワークフローには、次の 2 つのトリガーが含まれています。
-
手動ディスパッチ (
workflow_dispatch): [アクション] タブから必要に応じてワークフローを実行します。必要に応じて、Java 21などのアップグレード ターゲットを指定します。 -
スケジュール済み (
schedule): 毎日午前 2 時 (UTC) に自動的に実行されます。 任意のスケジュールに合わせて cron 式を調整します。
各実行では、次の手順を実行します。
- リポジトリ コードをチェックアウトします。
- 最新の Modernize CLI をダウンロードしてインストールします。
- 指定したターゲットを使用して
modernize upgradeを実行するか、既定値をlatestします。 - 変更をコミットして、タイムスタンプ付きのブランチにプッシュします。
- ブランチと PR のリンクを含む概要を GitHub Actions ステップの概要に書き込みます。
- トラブルシューティング用のビルド成果物として最新化 CLI ログをアップロードします。
注
ワークフローは、ワークフロー ファイル自体を誤って変更しないように、コミットする前に .github/workflows をリセットします。
パイプラインを実行する
ワークフローを手動でトリガーするには:
- GitHub のリポジトリに移動します。
- [Actions](アクション) タブを選択します。
- ワークフローの一覧から [モダン化 CLI ] を選択します。
- [Run workflow] を選択します。
- 必要に応じて、アップグレード ターゲットを入力し、[ ワークフローの実行 ] を選択して確認します。
ワークフローが完了したら、結果ブランチへのリンクの手順の概要を確認し、変更をマージするプル要求を作成します。
Troubleshooting
一般的な問題
認証エラー:
- 有効な GitHub 個人用アクセス トークンを使用して、
GH_TOKENシークレットまたは変数が正しく設定されていることを確認します。 - トークンに GitHub Copilot アクセスに必要なスコープがあることを確認します。
変更は検出されません。
- Modernize CLI は、指定されたターゲットに変更が必要ないと判断する場合があります。
- 評価の詳細については、アップロードされたログ成果物を確認します。
プッシュ エラー (Azure Pipelines):
- ビルド サービス ID に、リポジトリに対する ブランチの作成、 投稿、 読み取りの アクセス許可があることを確認します。
- 詳細なセットアップ手順については、「 スクリプトで Git コマンドを実行 する」を参照してください。
CLI のダウンロード エラーを最新化します。
- ランナーが https://github.comにインターネットにアクセスできることを確認します。
- ダウンロードをブロックする可能性があるプロキシまたはファイアウォールの制限を確認します。