本文說明如何自訂 GitHub Copilot 現代化計畫,將 Java 和 .NET 應用程式遷移到 Azure。
你可以透過多選議題在評估報告中建立計畫,或點擊遷移到Azure從側邊欄建立並執行現代化計畫,來啟動現代化會議。 當您啟動現代化會話時,GitHub Copilot 會產生一個 plan.md 檔案(以及一個配套的 .metadata/tasks.json 檔案),描述遷移目標、範圍、目前與目標架構,以及任務清單。 這兩個檔案可作為現代化代理程式據以執行的藍圖。 你可以在執行前細化計畫,以更符合專案需求。
代理產生 plan.md 後,會在 Visual Studio Code 編輯器中自動開啟。 此時,您可以檢視並客製化計畫,確保其符合您的具體現代化目標。
Important
可透過要求 Copilot 重新產生或更新計畫來自訂計畫,而非直接手動編輯plan.md。 直接編輯到 plan.md 不會更新驅動執行的伴隨檔案 tasks.json,兩個檔案可能會漂移不同步。下面每個章節的建議模式是「告訴 Copilot 要改什麼,然後讓它再生」。
plan.md 範例檔案結構
代理會產生包含以下章節的 plan.md 檔案。 Java 和 .NET 專案也採用相同的結構。
| 章節 | Purpose | 可透過提示詞自訂 |
|---|---|---|
| 專案標頭 | 專案名稱與現代化標題。 | 是的——調整標題以反映波形或範圍。 |
| 技術架構 | 目前的語言、框架、建置工具、資料庫及金鑰相依性,皆可從原始碼中偵測。 | 間接地——透過向 Copilot 提示來更正任何偵測錯誤的事實。 |
| 概觀 | 現代化目標的敘述性描述:改變的是什麼、原因與分階段的做法。 面向商業,沒有技術細節。 | 是的——澄清業務意圖,新增或刪除項目符號。 |
| 移民影響摘要 | 一個表格將每個應用程式映射×原始服務→新的Azure服務、認證方法與註解。 | 可以——更改目標服務、更改認證、新增或移除列。 |
| 開放式問題與問卷 | 在建立計畫過程中提出的澄清問題,以及使用者的回答。 推動任務選擇。 | 是的——回答開放性問題,修正之前的答案。 |
詳細的任務清單不在 plan.md。 它位於 .metadata/tasks.json 中,並且是根據你在 「開放式問題與問卷」 區段中的回答以及代理程式的分析所產生。 要更改任務,請提示Copilot重新生成計畫(參見 如何自訂)。
可自訂的內容
現代化計畫展示了四種客製化表面。 各項內容都對應到 plan.md 的一個區段,且是透過向 Copilot 發出提示來存取,而不是直接編輯。
1. 現代化範圍
範圍決定了代理產生的任務類型。 該計畫支援四種範疇類型:
- Upgrade — 執行時及框架版本升級(例如 JDK 11 → 17、Spring Boot 2.x → 3.x、.NET Framework → .NET 8)。
- 遷移至 Azure——以Azure等效服務取代本地或非Azure服務(例如 Oracle → 適用於 PostgreSQL 的 Azure 資料庫、ActiveMQ → Azure 服務匯流排、硬編碼秘密→Azure Key Vault)。
- 容器化 — 產生 Dockerfile 及相關的建置產物。
- Deployment — 產生部署檔案並部署到Azure。 部署任務隱含容器化。
要自訂瞄準鏡,請告訴 Copilot 哪些瞄準鏡類型適用於這次任務。 例如:
For this modernization plan, only include Upgrade and Migration to Azure tasks. Do not generate containerization or deployment tasks — those are handled by a separate pipeline.
2. Target Azure 服務與認證
Migration Impact Summary表格記錄每個遷移元件的目標Azure服務與認證方法。 請在初始計畫產生前或之後,向 Copilot 提示以自訂這些值。 例如:
Update the Migration Impact Summary:
- Use Azure Container Apps as the deployment target, not Azure Kubernetes Service.
- Use Managed Identity for the PostgreSQL connection. Do not use Key Vault for the DB password.
- Migrate file-based logging to Azure Monitor (Application Insights), not to console-only.
代理程式會重新產生 plan.md 和 tasks.json,使任務清單與表格保持一致。
3. 問卷答案
當客服人員具備 ask_user 可用能力時,會提出簡短問卷以評估計畫範圍。 三個預設問題為:
| Question | 預設答案 | 對計畫的影響 |
|---|---|---|
| Azure 上的部署目標 | 沒有部署 | 新增(或省略)部署工作,並選取目標運算服務(Azure 容器應用程式、Azure Kubernetes Service、Azure App 服務、App Service 受控執行個體、Azure Function Apps、Azure Static Web Apps)。 |
| 要包含整合測試嗎? | No | 當設定為「是,與容器的本地整合」或「是,本地整合與煙霧測試」時,會在遷移任務之後、容器化之前新增一個整合測試任務。 |
| 要包含容器化(Dockerfile 生成)嗎? | No | 新增一個獨立的容器化任務。 若選擇部署任務,則自動跳過,因為部署涵蓋容器化。 |
如果客服沒有問問題(例如因為ask_user無法使用),或你想更改之前的答案,請提示Copilot。 例如:
Update the plan with these answers:
- Deployment target: Azure Container Apps
- Integration testing: Yes, Local Integration and Smoke Tests
- Containerization: handled by deployment task, no standalone containerization needed
答案會以勾選項目記錄於 「開放問題與問卷 」區塊,並驅動任務選擇。
4. 新增、移除或精煉特定任務
你可以請 Copilot 新增未產生的任務、刪除不想要的任務,或調整現有任務的範圍。 提示詞intent — 讓Copilot從其知識庫中選擇匹配的技能與模式。
範例:
Add a task to migrate from ActiveMQ to Azure Service Bus.
Drop the integration test task — we have an existing test suite that covers this.
The Spring Boot upgrade task should target Spring Boot 3.2 specifically, not "latest".
備註
代理只為其具備相應技能或模式的遷移建立任務。 如果你要求進行代理程式無法支援的遷移(例如內部專有服務),系統會在範圍區段中加入警告,而且不會新增該任務。 在這種情況下,將遷移視為手動步驟,並新增指引說明(見下一節)來記錄。
如何自訂:提示 Copilot 再生
請使用以下工作流程:
- 代理人產生初始訊息
plan.md後再檢視。 - 明確你想改變的範圍、目標服務、認證、問卷答案或特定任務。
- 向 Copilot 提示變更。 具體說明:說明章節和期望的結果。
- 讓 Copilot 一起重新產生
plan.md和.metadata/tasks.json。 兩個檔案必須保持對齊才能執行。 - 請重新檢視更新後的計畫。 反覆調整,直到範圍、目標架構和任務清單符合你的意圖。
端對端範例提示:
Update the modernization plan with these changes:
1. Add Migration to Azure scope for messaging — migrate ActiveMQ to Azure Service Bus.
2. Use Managed Identity for all Azure service connections; do not introduce Key Vault.
3. Deployment target is Azure Container Apps.
4. Include Layer 1 and Layer 2 integration tests.
5. The Spring Boot upgrade task should explicitly include the JDK 17 and Jakarta EE migration in its description, as a single task (do not split).
Copilot 會重新建立計畫、更新表格、記錄問卷答案,並相應地修訂任務清單。
提供執行指引
除了範圍與任務外,還提供Copilot 指引——方法論、慣例、工具與規則——以規範現代化的執行方式。 通常將指引新增為計畫中的 Guidelines 章節,或作為對本機規則檔案的參照。
請包含任何有助於引導 Copilot 如何修改程式碼的指示,例如:
- 對某些遷移方法的限制或禁止(例如不要引入 Spring Cloud Azure啟動程式;請使用原生 SDK)。
- 程式碼風格或慣例要求。
- 連結到代理可存取的內部檔案、文件或腳本。
- 領域知識有助於修正錯誤或執行遷移。
- 代理人應如何註釋或評論程式碼變更的要求。
- 執行過程中產生的臨時產物的清理指令。
範例:
Add these guidelines to the plan:
- Use Azure Managed Identity for every Azure service connection. Do not introduce connection strings or Key Vault secrets unless a service has no Managed Identity support.
- Follow the code conventions defined in `/docs/internal/code-style.md`.
- Provide detailed comments explaining why each code change is necessary.
- After execution, remove any temporary scripts or scratch files created during migration.