Apple 將 Xcode Cloud 工作流程啟動條件分為分支變更、PR 變更、標籤變更與排程四類;官方啟動條件說明也指出,這些條件可以分開配置。
症狀:PR 驗證重複啟動、非目標分支也建置,或新提交一來前一筆就取消。
最快解法:把 PR、預設分支、標籤與定時任務拆成職責清楚的工作流程,收窄各自觸發範圍;只有較新建置確實能取代舊結果時,才保留該條件的自動取消。
適合你閱讀:獨立開發者可排查預設分支更新後的重複驗證;CI 工程師可整理 PR、發布與夜間測試的啟動路徑;研發平台維護者則可在減少無效建置的同時,保留合併與發布所需的驗證紀錄。
先分清楚啟動條件、觸發來源與建置動作
建置次數本身不足以說明問題在哪裡。你需要分開看三件事:啟動條件是設定了哪些事件可以啟動工作流程;觸發來源是某一筆實際建置由哪個事件啟動;建置動作則是啟動後執行的分析、測試或封存工作。自動取消是另一項設定,不能和上述三者混為一談。
| 設定面向 | 你要確認的內容 | 常見誤判 |
|---|---|---|
| 啟動條件 | 分支變更、PR 變更、標籤變更或排程是否符合預期 | 看到 PR 建置,就認定它只由 PR 條件啟動 |
| 觸發來源 | 建置紀錄顯示是哪一類事件啟動,以及對應分支或 PR | 由工作流程名稱推斷觸發事件 |
| 建置動作 | 實際執行的測試、分析或封存工作是否適合該事件 | 以修改建置動作代替修正過寬的啟動條件 |
| 自動取消 | 哪一個啟動條件啟用了取消,以及新舊建置是否可互相替代 | 將取消結果當成觸發次數異常 |
Apple 的工作流程參考文件可協助你對照工作流程設定;設定入口與實際建置紀錄應一起檢查,不要只看畫面上的工作流程名稱。
對照症狀定位是哪個條件過寬
| 你觀察到的現象 | 優先檢查 | 下一步判斷 |
|---|---|---|
| 預設分支更新後,PR 驗證也啟動 | 工作流程是否同時使用分支變更與 PR 變更條件 | 比較兩者的驗證目的;若一個是分支整合驗證、另一個是 PR 閘門,考慮分開 |
| 非目標分支也開始建置 | 分支範圍是否涵蓋發布、臨時或其他不相關分支 | 依用途縮小範圍,再用非目標分支以外的預期路徑試跑 |
| PR 更新沒有預期檢查 | 是否配置 PR 變更條件,以及目標分支方向是否符合合併策略 | 查建置記錄的觸發來源;不要先以腳本猜測補救 |
| 快速連續推送後,舊建置消失 | 對應啟動條件的自動取消設定 | 確認較新建置能否取代舊結果,並檢查取消是否只作用於預期條件 |
| 夜間 UI 測試隨每次提交啟動 | UI 測試實際綁定的分支、PR 或排程條件 | 將夜間測試與日常 PR 回饋分開驗證 |
預設分支更新後,PR 驗證為何也啟動
分支變更與 PR 變更代表不同的啟動條件;同一個工作流程若同時符合多個條件,便應逐筆核對建置紀錄,而不是預設所有建置都來自 PR。Apple 的首個 Xcode Cloud 工作流程設定說明介紹了工作流程的設定方式;你可以用它對照目前配置,再決定保留同一工作流程的多個條件,還是按驗證目的拆開。
如果預設分支建置是用來驗證合併後狀態,PR 建置則是合併前檢查,分成兩個工作流程通常更容易看出責任邊界。調整前,先確認每一筆建置的來源和目標分支;否則只憑建置時間接近,就把兩筆紀錄視為重複,可能會關掉仍需要的驗證。
非目標分支也建置時,先縮小分支範圍
分支條件應配合工作流程用途:PR 驗證不應意外承擔所有發布分支的日常建置,發布檢查也不必因臨時分支更新而啟動。檢查目前選取的分支與排除範圍,再對照團隊的合併和發布規則。Apple 對分支啟動條件的說明,可供你核對條件所代表的分支範圍。
調整後要用預期分支確認仍會啟動,也要確認不在範圍內的分支不會觸發該工作流程。不能只憑配置推測來源;應以建置紀錄中的實際觸發資訊作判斷。
PR 檢查漏跑或範圍不符時,核對目標分支
如果 PR 更新後沒有預期檢查,先確認工作流程是否配置 PR 變更啟動條件,以及設定的目標分支是否符合團隊的合併方向。若檢查範圍不對,查看記錄裡的觸發來源和目標分支,再判斷是條件不匹配,還是建置動作本身不合適。
只有在確認是 PR 觸發的建置後,才使用適用於該情境的環境變數進行腳本分流。Apple 的環境變數參考列明變數資訊;不要在其他觸發路徑下假設 PR 專屬變數一定可用。若問題關乎合併門檻,另對照 Apple 的PR 合併要求設定說明,分清啟動工作流程和要求檢查通過是不同設定。
依驗證目的拆分工作流程,不要把動作當成觸發條件
下表不是建議你照抄固定配置,而是用來檢查每類工作是否有清楚的負責範圍。Apple 的工作流程策略說明可作為拆分與規劃工作流程的參考。
| 工作流程用途 | 合適的啟動條件方向 | 建置動作檢查重點 |
|---|---|---|
| PR 快速回饋 | PR 變更,並限定符合團隊合併策略的目標分支 | 保留合併前必需的檢查,避免納入無關的夜間工作 |
| 預設分支整合驗證 | 預設分支變更 | 驗證合併後狀態,不要把它誤認為 PR 觸發 |
| 發布或標記版本 | 依發布流程選用標籤或指定分支條件 | 確認封存或發布相關動作不會因一般提交意外執行 |
| 夜間 UI 測試 | 排程條件,並確認沒有其他不必要的觸發條件 | 將較長或涵蓋多模擬器的測試與日常快速回饋分開 |
排程工作是否真的只由排程啟動,仍須以建置記錄驗證;工作流程的顯示名稱不是證據。若團隊需要每筆提交的驗證紀錄,夜間工作也不應在未確認取消規則前,共用一個可能自動取消的條件。
自動取消應按條件決定,不是一律開或關
Apple 說明,工作流程的自動取消預設對各啟動條件開啟,並可按條件調整。這代表你要逐條確認設定,而不是看到某筆建置遭取消,就直接關閉所有自動取消。先閱讀啟動條件設定說明,再按以下判準選擇:
- 較新提交的驗證可取代尚未完成的舊提交結果,而且你不要求保留每次提交的完整建置紀錄:保留該條件的自動取消,再確認取消只影響預期工作流程。
- 每個提交都必須留下獨立驗證證據,或舊建置仍代表不可被新結果取代的檢查:評估關閉該條件的自動取消。
- 只有部分工作可以被較新結果取代:按啟動條件拆分工作流程,不要讓夜間測試和 PR 快速檢查共用一套取消策略。
設定改動後,安排一組連續更新的試跑,記錄哪些建置啟動、哪些被取消,以及各自的觸發來源。這樣才能確認變更作用在預期條件上,而非只看到最後一筆建置成功就判定問題已解決。
調整後依清單驗證,保留可複核證據
請在正式套用前後逐項核對:
- [ ] 依工作流程用途標記 PR、預設分支、發布或排程任務。
- [ ] 查看每筆相關建置的觸發來源與目標分支,不以建置名稱猜測。
- [ ] 分別檢查分支、PR、標籤與排程條件,移除不符合該工作流程用途的觸發範圍。
- [ ] 確認 PR 工作流程限定的目標分支與團隊合併策略一致。
- [ ] 將夜間 UI 測試與日常 PR 快速回饋分開,並各自試跑排程和 PR 更新路徑。
- [ ] 按每個啟動條件檢查自動取消,先決定是否需要保留每次提交的驗證紀錄。
- [ ] 修改後整理工作流程名稱、觸發來源、目標分支與取消狀態,讓其他維護者能重現判斷。
如果建置次數或取消結果仍無法解釋,就逐項對照 Apple 的工作流程動作設定說明,確認啟動後執行了哪些工作;不要未經記錄便把問題歸因於算力、建置速度或執行環境。
常見問題
只希望 PR 更新時建置,該如何避免分支更新也觸發?
建立以 PR 變更為啟動條件的獨立工作流程,按合併策略限定目標分支,並移除不屬於 PR 驗證的分支或排程條件。試跑後查看建置記錄中的觸發來源,確認實際事件與預期一致。
預設分支更新後,怎樣判斷是不是重複建置?
對照每筆建置的工作流程、觸發來源及目標分支。若記錄顯示分別由分支變更和 PR 變更條件啟動,這是不同條件下的執行,不能只因時間相近就當成單一事件重複;接著再按驗證目的拆分工作流程。
自動取消建置應否關閉?
先問新提交能否取代舊提交的驗證結果。若必須保存每次提交的獨立證據,評估關閉相應條件的自動取消;若新結果足以取代舊結果,則可保留,但要用連續更新試跑確認取消範圍沒有超出預期。
PR 驗證和夜間 UI 測試怎樣分開?
為 PR 快速檢查和夜間 UI 測試安排不同工作流程,分別使用 PR 變更和排程條件,並檢查是否還有額外分支條件會啟動測試。各自試跑一次後,核對觸發來源和實際建置動作,尤其留意自動取消是否符合該工作的驗證需求。
先按實際用途拆分 PR、預設分支、發布與定時工作流程,並以觸發紀錄驗證每項設定。若你仍受限於需要持續在線的主機、自訂 macOS 工具鏈,或工作流程以外的環境控制,Xcode Cloud 工作流程本身未必能提供你需要的主機管理方式;自行維護硬體則要承擔採購、更新與長期維運,其他通用伺服器環境也不一定能執行 macOS 專屬工具。這些條件成立時,再評估遠端 Mac 是否適合你的執行層;可先看 KVMFLUX 的 Xcode CI 使用情境,若需要比較按期使用方案,再查閱 KVMFLUX 方案與價格。若現有工作流程已符合你的驗證與環境需求,就不必為了觸發次數問題另外租用主機。
延伸閱讀
為持續建置準備一台專屬遠端 Mac
若 PR 驗證仍需要常駐主機或自訂 macOS 環境,KVMFLUX 提供專屬 Mac mini M4,讓您按實際需要安排建置工作。 實體 Apple Silicon 硬體由您獨享,搭配 SSH、VNC 與 root 權限,方便管理工具鏈、快取及建置環境。 可按日、週、月或季租用,從短期測試到長期 CI 節點,都能選擇合適的使用週期。 提供六個地區節點,付款後幾分鐘內即可取得連線資訊,無須先採購或維護實體 Mac。