舊提交仍佔著 Xcode Cloud 工作流,新提交來了卻不確定該不該中止舊建置?
對可由後續提交取代的分支驗證,啟用自動取消並收斂觸發條件;發布封存或不能安全重跑的工作流,關閉此設定或拆成獨立工作流,最後核對取消對象與交付結果。
負責管理 Xcode Cloud 工作流的 IT 或平台負責人,可用本文制定觸發與取消策略。
負責 UI 測試和回歸任務的研發效能團隊,可判斷哪些建置適合合併或取消。
維護發布封存與 TestFlight 流程的團隊,可檢查取消設定是否會中斷交付。
先按工作流的結果價值決定是否自動取消
自動取消不是通用的排隊清理開關。判斷重點不是建置新不新,而是新建置是否能取代舊建置的結果,以及被取消的工作是否能安全重跑。
Apple 的 Xcode Cloud 工作流參考文件說明:啟用自動取消後,同一工作流排入新建置時,進行中的建置可能會被取消。這描述的是工作流層級的取消行為;不同觸發方式、工作流組合及團隊門禁造成的實際結果,仍要以你的工作流設定和執行記錄驗證。
先把工作流分成兩類:
- 可被新提交取代的驗證:例如只用來確認目前分支是否仍可建置的快速檢查。新提交到達後,舊提交的驗證結果可能已不代表目前程式碼狀態。
- 每次執行都有獨立價值的工作:例如要保留的問題診斷、稽核證據,或產生交付成果的發布工作。只因為出現較新的提交,不代表舊工作失去價值。
正在執行的建置也會被取消嗎?
符合文件所述條件時,同一工作流排入新建置可以取消進行中的建置。不要因此假設所有工作流都會互相取消;先確認新建置是否屬於同一工作流,再從執行記錄確認實際被取消的工作。
讓分支更新驗證只保留有用的結果
分支驗證的目的,是讓團隊知道目前程式碼能否通過必要檢查,而不是替每一次推送永久保留一份結果。當分支快速更新,較舊的提交可能不再是合併決策的依據;但如果團隊要追蹤每次變更引入的問題,舊建置就不一定可丟棄。
先盤點工作流的啟動條件。Apple 的工作流策略指南及首次設定工作流說明可協助你核對工作流如何因程式碼變更等條件啟動。按團隊實際需要設定觸發來源,不要讓不相關的分支變動也啟動昂貴的驗證工作。
快速連續提交時,可以只保留最新驗證嗎?
若工作流只回答「目前分支版本能否通過門禁」,且最新建置會完整重跑相同檢查,可評估啟用自動取消。若你要逐次比較錯誤、保留每個提交的診斷結果,或工作包含不能重複產生的副作用,則應保留獨立工作流或關閉自動取消。
每次測試設定變更時,記錄觸發來源、提交識別、工作流名稱、取消狀態及最終驗證結果。Apple 的環境變數參考列出 Xcode Cloud 執行環境可用的變數;你可從實際執行記錄檢查建置與提交資訊,避免只看工作流名稱就把不同提交的結果混在一起。
把 UI 回歸從每次分支更新中拆出來
多模擬器 UI 回歸通常比單純建置檢查更重。若每次小幅推送都啟動完整回歸,執行中的工作可能很快被後續建置取代;反過來,如果只在發布前測試,團隊又可能太晚才發現介面問題。
UI 測試需要每次提交都觸發嗎?
不一定。先確認測試結果是否屬於合併門禁,再依觸發條件決定範圍:快速、必要的檢查可跟隨分支驗證;完整 UI 回歸則可評估由特定分支、人工操作或另一個專用工作流啟動。可用的觸發選項與設定方式,應以工作流動作說明及目前介面為準。
取消建置不等於測試通過。Apple 的測試結果說明可作為判讀測試結果的依據;驗收時要確認真正完成的測試結果與門禁狀態,而不是把「工作流已結束」直接視為成功。
將發布封存工作流與日常驗證隔離
發布工作流的結果可能直接影響 TestFlight 分發或正式交付。新提交出現時,舊建置未必就可以丟棄:它可能正處於封存或上傳階段,也可能是團隊正在驗收的指定版本。
發布封存工作流應該關閉自動取消嗎?
如果工作流需要產生並保留指定版本的交付結果,先關閉自動取消,或將發布工作流拆離日常分支驗證。只有在你確認新建置能取代舊交付、且中止不會丟失必要產物時,才考慮沿用自動取消策略。
Apple 的應用程式分發工作流指南說明分發工作流的建置與交付設定;App Store Connect 建置狀態參考和上傳建置說明可協助你核對上傳後的狀態。驗收時分別查看建置、封存及分發狀態,不要只以工作流已啟動或已結束判斷發布完成。
注意:若發布工作流和分支驗證共用相同取消策略,先在不影響正式交付的測試工作流驗證新建置會取消哪個工作,再調整正式設定。
以六個檢查步驟驗證取消策略
不要只看設定開關是否已啟用。用測試提交確認觸發來源、取消對象和最終結果,並保留操作紀錄。
- 第一步:列出工作流與責任。 標出分支驗證、UI 回歸、診斷及發布封存工作流,註明各自的負責人和產出。
- 第二步:記錄目前觸發條件。 核對哪些程式碼變更、分支或其他條件會啟動工作流,並確認設定與團隊的合併門禁一致。
- 第三步:標記可替代性。 對每項工作回答:新建置完成後,舊建置結果還有沒有獨立用途?取消後能否安全重跑?
- 第四步:只改測試工作流。 先挑選可重跑、沒有發布副作用的驗證工作流,調整觸發條件或自動取消設定;變更依據可對照工作流參考文件。
- 第五步:製造可辨識的連續提交。 以不同提交識別觸發工作流,從執行記錄核對取消的是哪一個建置、它屬於哪個工作流,以及新建置最後是否完成必要驗證。
- 第六步:回復並驗收正式線。 若測試結果與預期不符,先還原設定。發布工作流則另行確認建置、封存與分發狀態,並由發布負責人確認交付完成。
用對照表選擇觸發與取消方式
以下對照用來制定團隊策略,不代表所有組合都會以相同方式執行。自動取消的文件行為以 Apple 工作流參考為準;實際取消對象仍須從你的工作流記錄確認。
| 工作流情境 | 觸發策略 | 自動取消判斷 | 驗收依據 |
|---|---|---|---|
| 分支快速驗證 | 只涵蓋需要參與合併決策的變更 | 新提交能完整取代舊結果時可啟用 | 提交識別、取消狀態及最新驗證結果 |
| UI 回歸 | 與快速驗證分開評估,避免無差別跟隨每次更新 | 若每次測試結果都有獨立價值,避免自動取消 | 測試結果及團隊門禁狀態 |
| 問題診斷或稽核 | 依追蹤目的保留各次執行 | 不能只按「保留最新」決定 | 每次執行是否留下需要的診斷證據 |
| TestFlight 或正式發布 | 使用獨立發布觸發與驗收 | 可能丟失指定交付結果時關閉或拆分 | 建置、封存、上傳與分發狀態 |
把執行記錄與發布驗收分開檢查
| 要核對的證據 | 應查看的內容 | 不能直接推論的事 |
|---|---|---|
| 觸發來源與提交 | 工作流記錄及可用的 Xcode Cloud 環境變數 | 只看到新工作啟動,不代表舊工作已被正確取代 |
| 取消狀態 | 哪個工作流中的哪個建置被取消 | 取消不代表測試失敗,也不代表測試通過 |
| 測試結果 | 實際測試報告與門禁狀態 | 工作流結束不等於必要測試已完成 |
| 發布狀態 | 建置、封存、上傳及分發記錄 | 工作流完成不等於版本已交付 |
按任務邊界安排 Xcode Cloud 與 Mac 節點
不是每個任務都需要從 Xcode Cloud 移出。先保留符合現有工作流條件、結果可追蹤的建置;若任務需要固定執行環境、企業私有網路條件,或團隊必須自行控制執行過程,再評估交由自主管理的 Mac 節點執行。此判斷依團隊環境與驗收要求而定,不應以未驗證的效能或價格推導遷移結論。
| 任務特性 | 優先留在 Xcode Cloud 評估 | 可評估交由自主管理的 Mac |
|---|---|---|
| 工作流控制 | 現有觸發與結果已符合團隊門禁 | 需要自訂執行流程或自行安排節點工作 |
| 網路與依賴 | 所需依賴可由現有工作流取得 | 受企業私有網路或特定依賴存取條件限制 |
| 執行環境 | 現有環境已足以完成驗證 | 需要團隊自行控制環境、權限或執行記錄 |
| 交接驗收 | 可直接以工作流和測試結果驗收 | 需另訂提交識別、產物交接及發布驗收責任 |
若你需要固定環境或自主管理的執行節點,可先評估遠端 Mac 的接入方式與適用情境,再對照團隊的網路、權限及交付驗收要求。若目前依賴臨時手動操作或共用本機,常見代價是環境不一致、執行過程難追蹤,以及硬體維護和閒置成本;以 MACCOME 租用遠端 Mac,適合用來補足短期測試、隔離驗證或待正式節點到位前的執行需求。需要長期穩定承載固定重負載,或必須直連特定實體設備時,則應先比較自購 Mac 與自建節點,租用不一定合適。你也可以從MACCOME 服務入口了解接入選項,再依驗收結果決定是否把特定 CI 工作交由 Mac 節點執行。