環境可重現
固定 Xcode、Command Line Tools、相依項目鎖定檔與清理指令。若要變更版本,先在獨立工作目錄驗證,再切換至正式佇列。
版本與鎖定檔以下流程並非客戶案例,也不代表未經驗證的成效承諾。我們將觸發來源、獨享實體機上的工作、簽章責任、日誌位置與產物去向分別說明,方便團隊依照自己的儲存庫與權限模式複製使用。
參考架構只說明工作如何流轉。儲存庫權限、簽章資料、開發者帳號、發布審核與產物保留期限,仍由使用團隊自行定義。
固定 Xcode、Command Line Tools、相依項目鎖定檔與清理指令。若要變更版本,先在獨立工作目錄驗證,再切換至正式佇列。
版本與鎖定檔透過受控注入方式提供權杖、憑證與描述檔。日誌僅保留排查問題所需資訊,輸出前移除路徑、權杖與私有儲存庫網址。
最小權限Archive、匯出套件、符號檔與測試報告分別命名,並附上提交識別碼。交接完成後,依團隊政策清除節點上的暫存副本。
受控匯出這條流程適合將 CDNMac M4 註冊為 self-hosted runner,由儲存庫事件啟動工作,再將最終產物交由團隊審核或後續發佈系統處理。
由主要分支或發布標籤觸發佇列。工作開始時會記錄提交雜湊、分支、觸發者與目標 Scheme,不會將敏感變數輸出至日誌。
去向:獨享實體機上的隔離工作目錄依據鎖定檔還原 Swift Package、CocoaPods 或其他相依項目。快取鍵至少包含鎖定檔摘要與工具版本,避免舊快取跨版本造成污染。
去向:版本化快取目錄與相依項目日誌使用明確指定的 workspace、scheme、configuration 與 destination 執行封存。若失敗,保留結束代碼、關鍵日誌與結果套件。
去向:附有提交識別碼的 Archive 目錄核對 Bundle Identifier、團隊、憑證有效性與描述檔是否相符。開發者帳號與簽章資產一律由使用者團隊管理。
去向:審核清單,不輸出明文憑證匯出安裝套件、符號檔、建置摘要與校驗值,再複製到團隊控制的儲存位置。確認交接完成後,清除暫存目錄。
去向:受控儲存空間與團隊審核佇列獨享不代表所有工作都能平行執行。對單台 CDNMac M4 而言,較穩妥的做法是明確設定優先順序、工作目錄與清理界線,避免發布工作與日常驗證互相影響。
合併後執行單元測試、靜態檢查與基本 Archive。快取可重複使用,但 DerivedData 需依專案與 Xcode 版本隔離。
進入佇列後,暫停同一儲存庫中非必要的工作,使用獨立的簽章檢查與匯出設定,並由團隊審核產物摘要。
由負責人確認後加入佇列。只還原解決問題所需的快取,建置完成後清除暫存變數並記錄復原基準。
發布工作不會中斷正在寫入產物的工作;失敗的工作先收集日誌,再釋出工作目錄;每項工作結束時都會執行冪等清理。
Flutter iOS 的等待時間往往分散在相依項目還原、CocoaPods 與 Xcode 建置各階段。拆分階段後,團隊才能判斷快取是否有效,以及問題出在哪一層。
每個階段各自輸出日誌與結束代碼。只有前一階段成功,下一階段才會讀取其產物,避免將相依項目問題誤判為 Xcode 編譯問題。
還原專案相依項目,並記錄 SDK 版本與鎖定檔摘要。
依據 Podfile.lock 安裝 iOS 原生相依項目,不重複使用不相符的 Pods。
使用明確指定的 workspace、scheme 與 configuration 執行 Archive。
完成簽章檢查後匯出,並產生提交識別碼與校驗摘要。
快取命中只代表對應目錄與鍵值可重複使用,不表示整體建置一定會更快。升級 Flutter、CocoaPods、Xcode 或鎖定檔後,應重新驗證快取界線。
雲端 Mac 負責產生與檢查建置產物,但不會取代團隊的發布審核。開發者帳號、簽章資產、版本資料與發佈決策皆由使用者管理。
發布分支完成 Archive 與匯出,並附上提交雜湊、版本號、建置號、符號檔與校驗摘要。
負責人核對變更範圍、簽章是否相符、隱私資料、權限用途與測試結果。若未通過,回到對應提交重新建置。
審核通過後,由團隊控制的發布工作使用受限憑證處理上傳;敏感資料不會存放在儲存庫或一般建置日誌中。
保存產物識別碼、審核結論與必要日誌。交接完成後,清除節點上的暫存匯出檔案與暫存憑證。
CDNMac M4 配備 M4、16GB RAM 與 256GB SSD,適合進行本機模型相容性驗證與原型測試;團隊仍應先確認模型、上下文、資料與記憶體需求。
只同步實驗所需的資料子集,並記錄來源與版本。敏感資料須先去識別化,並為原始資料、中間處理資料與輸出結果設定不同目錄。
記錄 macOS、執行階段、框架與模型格式。先用小型樣本驗證載入、推論與記憶體使用量,再決定是否擴大實驗範圍。
輸出實驗參數、結果摘要與必要日誌,避免在報告中寫入完整敏感資料。租用期間結束前,將必要結果複製到受控儲存空間。
若模型、上下文與中間資料無法在 16GB RAM 內穩定執行,或需要未列出的晶片與記憶體規格,請先聯絡服務團隊確認。原型測試通過不代表已驗證正式環境所需容量。
洽詢實驗配置以下內容為適用於內部回顧的角色對話範例,不代表特定客戶評價、評分或公司背書。
「我更在意佇列是否只供目前團隊使用,以及失敗後能否留下方便排查的日誌。比起泛泛地談建置速度,把工作目錄和產物去向說清楚更有幫助。」
行動端負責人
「多個分支工作共用同一台實體機時,真正需要設計的是優先順序、快取鍵與清理策略。獨享資源提供了隔離基礎,但工作流程仍要由我們自行定義。」
CI 平台工程師
「跨時區連線時,我希望遠端存取、背景建置與產物匯出彼此獨立。如此一來,即使本地網路短暫中斷,也不會影響正在執行的建置工作。」
獨立開發者
開始複製前,先建立最小可執行版本。環境變數名稱可依團隊規範調整,但敏感值不應提交至儲存庫,也不應直接輸出到建置日誌。
| 工作流程 | 準備事項 | 環境變數清單 | 失敗復原點 |
|---|---|---|---|
| App 自動化打包 | 儲存庫存取權、Xcode 版本、Scheme、相依項目鎖定檔、匯出設定 | REPO_REF BUILD_SCHEME EXPORT_PATH |
保留結果套件與提交識別碼,清除暫存鑰匙圈,回到上一個可成功建置的提交 |
| 多分支建置 | 分支優先順序、獨立工作目錄、平行數限制、冪等清理指令碼 | BRANCH_NAME RUN_PRIORITY WORK_ROOT |
停止後續佇列、保存目前日誌,還原乾淨的工作樹與原始佇列順序 |
| Flutter iOS | Flutter 版本、Podfile.lock、Xcode workspace、快取鍵規則 | FLUTTER_ROOT PODS_CACHE_KEY IOS_SCHEME |
依階段讓快取失效,不刪除可重複使用的日誌,從最近成功的階段重新執行 |
| TestFlight 交付 | 發布審核、版本資料、簽章相符檢查、產物校驗與團隊控制的憑證 | RELEASE_VERSION BUILD_NUMBER ARTIFACT_PATH |
停止發佈工作、撤銷暫存憑證、返回審核清單並重新產生候選產物 |
| AI 實驗 | 模型格式、小型樣本資料、執行階段版本、記憶體監測與匯出目錄 | MODEL_PATH DATASET_PATH RESULT_PATH |
保留參數清單與結果摘要,還原固定相依項目,回到唯讀原始資料副本 |
只設定一個儲存庫、一個 Scheme 和一個輸出目標,確認節點能完成整個流程。
透過受控方式注入最小權限憑證,並驗證日誌遮蔽、到期與輪替流程。
新增更多分支前,先設定優先順序、逾時時間、失敗回收與工作目錄清理規則。