Flutter CI/CD Debugging: Three Build Failures in One Day
前言:當建置一直紅燈 CI/CD pipeline 亮紅燈是開發日常,但連續遇到三個不同層面的問題,從 iOS codesigning、Android Gradle、到 Google Play API,這就值得記錄下來了。 這篇文章記錄我在同一天內遇到的三個建置失敗,以及逐步排除的過程。每個問題都有其獨特的根因,但也反映出 CI/CD 環境的複雜性。 問題一:iOS Keychain 解鎖失敗 症狀 Jenkins 建置在 iOS 階段失敗,錯誤訊息: [!] Error unlocking keychain at path: fastlane_keychain Command failed with exit status 51 macOS Keychain 運作機制 在深入問題之前,先了解 macOS Keychain 的運作方式: flowchart TD subgraph Keychain["macOS Keychain 系統"] KC1[login.keychain<br/>使用者預設] KC2[fastlane_keychain<br/>CI 專用] KC3[fastlane_tmp_keychain<br/>臨時] end subgraph Certs["憑證與密鑰"] CERT[Apple Distribution<br/>Certificate] KEY[Private Key] end KC2 --> CERT KC2 --> KEY subgraph Access["存取控制"] LOCK[🔒 Locked<br/>密碼保護] UNLOCK[🔓 Unlocked<br/>可存取憑證] end LOCK -->|正確密碼| UNLOCK LOCK -->|錯誤密碼| ERROR[❌ Exit 51] classDef default fill:#f5f5f5,stroke:#333,color:#333 classDef error fill:#f8d7da,stroke:#dc3545,color:#721c24 classDef success fill:#d4edda,stroke:#28a745,color:#155724 class ERROR error class UNLOCK success 關鍵概念: ...