settings.gradle.kts 鏡像鏈、gradle.properties、遠端建置快取鍵、lockfile 驗收與 FAQ(401、憑證釘選、私服混用),可抄進 Runbook 以利交接與版本對齊備查。延伸:Gradle/Maven 矩陣、CocoaPods、SPM、首頁。
跨境拉取瓶頸畫像(誰在拖慢解析)
(一)模組各自宣告倉庫會放大 RTT。(二)--parallel 加過高 workers.max 易觸發429或 TLS 排隊。(三)未固定 GRADLE_USER_HOME 會造成命中假象;多人 uid 混用時更易損壞 modules-2。
settings.gradle.kts:dependencyResolutionManagement 鏡像鏈模板
核准域名集中在 dependencyResolutionManagement.repositories;Android 請保留 google()、mavenCentral() 排序後再接私服/鏡像。
// settings.gradle.kts(請替 URL)
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
maven { url = uri("https://nexus.example.com/repository/maven-public/") }
maven { url = uri("https://mirror-region.example/maven2") }
google()
mavenCentral()
}
}
💡 FAIL_ON_PROJECT_REPOS 可避免子模組另開公網倉。
遠端 Mac CI:鏡像策略 × parallel × 快取鍵(決策矩陣)
| 情境 | 鏡像/倉庫策略 | parallel/workers 建議 | 遠端建置快取鍵要點 |
|---|---|---|---|
| 共享節點多 job | 私服優先、禁散落 maven | parallel=true;workers.max≤實體核並預留系統 | 鍵含 Gradle 版、JDK、os.arch;換 toolchain 要 bump |
| 弱網逾時 | 最短鏡像鏈 | 降 workers;分拆下載/編譯步 | 先拉高逾時;共用汙染則加鍵前綴 |
| 私服+公開混用 | 內部 group 走路由其餘 fallback | parallel 可開、控連線數 | 鎖檔進庫後放量;鍵含鎖檔雜湊 |
同機若還跑 npm/Docker 拉取,請將最重下載步錯開尖峰,降低頻寬互搶。
parallel worker 與守護行程記憶體峰值閾值
與 Xcode 等同機時,org.gradle.jvmargs 峰值須低於 RAM 扣掉系統與他 job;開 Configuration Cache 再多留堆疊。
# gradle.properties(示例,請依節點 RAM 調整) org.gradle.parallel=true org.gradle.workers.max=4 org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 org.gradle.daemon=true
遠端建置快取鍵命名與失效策略
鍵須區分 JDK 廠商/版號與相依圖;升級 AGP 或 Kotlin 外掛視為強制失效並刷新 CI 鍵。若產物須跨平台位元組一致,鍵也應納入與 ABI 相關旗標。
可引用:(1)/var/cache/gradle-ci 單一 uid;(2)HTTP 逾時一百二十秒起;(3)重試二四八秒退避、共三至五輪;(4)磁碟水位告警應早於快取爆滿。
落地步驟(逾時、重試、目錄與驗收)
目錄:export GRADLE_USER_HOME=/var/cache/gradle-ci,確認 caches/modules-2 可寫;共享卷選支援檔案鎖的檔案系統。
逾時:gradle.properties 設 systemProp.org.gradle.internal.http.connectionTimeout=120000 與 socketTimeout=120000(毫秒);鏡像在海外時可再加長並打線上探針驗收。
CLI:./gradlew --parallel --build-cache(後端支援遠端快取時);一次性容器可加 --no-daemon。
重試:for i in 1 2 3 4 5; do ./gradlew … && break || sleep $((2**i)); done,設上限。
lockfile:乾淨樹跑解析,鎖檔雜湊進 CI 鍵;漂移先查鏡像鏈。
FAQ:401、憑證釘選、私服混用
權杖未進 CI 行程或鏡像轉發至需鑑權上游。以 gradle --info 查 URL,curl 去敏複現標頭。
映像層匯入根 CA 到 JDK truststore,或以啟動腳本設 TLS 屬性;私鑰勿進版本庫。
可,須固定順序與路由,避免同座標在不同 runner 命中不同上游;保留核准域名清單。