# Android / Expo — CI/CD 技術驗證 > 本文件僅說明 CI/CD 技術流程與設計思路,所有名稱與設定皆為示意用途。 > --- ## 📌 專案基本資訊 - **專案名稱**:App (Android / Expo) - **實作目標**:驗證 GitHub Actions 作為首選 CI/CD 平台之可行性與穩定性 - **驗證結果**:✅ **實作成功** - Dev 環境流程已完整跑通 - 成功自動上架至 Google Play (Internal Track) --- ## 1️⃣ 執行摘要 (Executive Summary) 本報告說明 **App** 於 **GitHub Actions (GHA)** 平台上,自動化建置與上架流程之實作成果。 本次實作以 GitHub Actions 為主題,成功建立一套具備以下特性的 CI/CD Pipeline: - ☁️ **雲原生 (Cloud-Native)** - 🧩 **無伺服器 (Serverless)** - 🔐 **高安全性 (Security by Design)** 經實際驗證,此流程已能 **全自動完成**: > 程式碼簽出 → 環境建置 → 憑證注入 → AAB 打包 → 上傳 Google Play Console 確認此技術方案 **成熟且可行**,具備正式導入價值。 --- ## 2️⃣ 自動化流程架構 (Workflow Architecture) 本次實作採用 **Pipeline as Code** 設計,所有 CI/CD 邏輯皆定義於專案 Repository 中,並針對 **Expo 專案特性** 進行客製化設計。 ### 🔄 核心流程步驟 1. **觸發啟動 (Trigger)** - 監聽特定分支 `feature/github-action-upload` 的 `push` 事件 - 未來可擴充為 **Git Tag** 觸發正式發布 2. **環境初始化 (Initialization)** - 啟動 Ubuntu Runner - 安裝並設定: - Node.js(Yarn) - Java(JDK 17) 3. **相依性安裝 (Dependencies)** - 執行 `yarn install` - 確保套件版本與 `yarn.lock` 完全一致 4. **機敏檔案動態還原 (Secure Restoration)** - 由 GitHub Secrets 還原: - `google-services.json` - Android Keystore - 僅存在於 CI 暫存環境,供 Expo Prebuild 與 Gradle 使用 5. **原生專案生成 (Expo Prebuild)** - 執行 `expo prebuild --clean` - 動態產生全新 Android 原生專案 - 確保建置環境 **100% 純淨** 6. **動態手術注入 (Dynamic Patching)** > ⭐ 關鍵技術亮點 - Prebuild 會重置所有原生設定 - 透過自動化腳本: - 在建置前一刻 - 將 **Signing Configs** 精準注入 `build.gradle` - 成功解決 **Expo Managed Workflow 無法保存簽章設定** 的限制 7. **編譯與打包 (Build)** - 執行 Gradle Task:`bundleRelease` - 產出 **Signed AAB (Android App Bundle)** 8. **自動上架 (Upload)** - 串接 **Google Play Developer API** - 上傳至 **Internal Track(內部測試)** - 發佈狀態設定為 **Draft** 9. **環境清理 (Cleanup)** - 強制刪除所有暫存: - Keystore - Firebase 設定檔 - 憑證相關檔案 --- ## 3️⃣ 關鍵技術優勢 ### A. 🔐 資安零信任架構 (Zero-Trust Security) - **憑證不落地** - Keystore、API Key、Firebase Config - 皆不存於 Git Repo,也不存於任何實體伺服器 - **記憶體內還原** - CI 執行期間以 Base64 Decode 動態還原 - 任務結束即銷毀,極大化降低外洩風險 --- ### B. 🛠️ 降低維護成本 (Maintenance) - **去依賴化** - 無需維護 Jenkins Server - 無需 Ruby / Fastlane 環境 - 完全使用 GitHub 原生 Actions + Gradle - **版本控制化** - `.yml`(Workflow)與 `.js`(自動化腳本) - 全數納入 Git 版控 - 流程變更可直接透過 **Code Review** 審核 --- ### C. 🧩 Expo 高度整合 - 克服 Expo Prebuild「每次皆為全新專案」的特性 - 透過自研 Patch 機制,實現: - ✅ 保有 Expo 升級彈性 - ✅ 同時擁有完整原生簽章控制權 - 為 Expo Android CI/CD 提供可複製的最佳實踐 --- ## 4️⃣ 實測數據與觀察 - **驗證狀態**:Dev 環境流程已完全跑通 - **產出物**: - 成功產出 Signed AAB - Google Play Console 已接收到新版本 - **效能觀察** - GitHub Actions 採 **Clean Build** - 每次需重新下載: - Android SDK - Gradle Dependencies - npm / Yarn 套件 - 單次建置時間偏長(可預期) - **穩定性調整** - 記憶體消耗較高 - 已針對 Linux Runner: - 調整 JVM Heap Size - 避免 OOM,確保流程穩定 --- ## 5️⃣ 未來優化建議 (Next Steps) ### 🚀 第二階段優化方向 1. **導入快取機制 (Caching Strategy)** - Gradle Cache - Yarn / npm Cache 👉 預期可減少 **40%~60%** 建置時間 2. **擴充正式環境 (Production Readiness)** - 補齊 Production Keystore 與 Secrets - 透過 Git Tag(如 `v1.0.0`): - 自動觸發正式版打包與發布 3. **流程標準化** - 此 GHA Workflow 架構高度模組化 - 可直接複製應用於: - React Native - Expo 系列專案 --- ## 🏁 結論 本次驗證結果顯示: > **GitHub Actions 完全有能力承擔 Android App 複雜的建置與上架需求** 相較於傳統地端 CI 方案,此架構在以下面向具備明顯優勢: - 🔐 安全性 - 🧩 可維護性 - 🔄 與現代前端生態的整合度 **建議可作為團隊未來 Android / Expo CI/CD 的標準技術選項。**