Azure Pipelines中Android Gradle跨分支缓存失效问题求助
Azure Pipelines Gradle跨分支缓存失效的解决办法
问题根源
你的缓存配置存在两个核心问题:
- 缓存路径错误:Gradle的默认本地缓存目录并非
$(Pipeline.Workspace)/.gradle,代理上的Gradle缓存通常存储在用户主目录下,路径随操作系统不同而变化。 - 缓存键与分支共享逻辑缺失:原配置的键没有区分主分支标识,无法让功能分支精准匹配主分支生成的缓存。
修正后的缓存配置
根据操作系统选择对应路径,以下是适配Linux/macOS的配置(Windows将path改为$(USERPROFILE)\.gradle):
steps: - task: Cache@2 inputs: key: 'gradle | "$(Agent.OS)" | main' restoreKeys: | gradle | "$(Agent.OS)" | main gradle | "$(Agent.OS)" path: '$(HOME)/.gradle' displayName: 'Cache Gradle'
配置说明
- 路径修正:
$(HOME)/.gradle(Linux/macOS)或$(USERPROFILE)\.gradle(Windows)是Gradle默认的本地缓存目录,确保缓存的是依赖包、构建缓存等有效内容。 - 缓存键设计:主分支构建时生成带
main标识的缓存键,保证主分支的缓存有稳定的唯一标识。 - 跨分支复用逻辑:功能分支通过
restoreKeys优先尝试恢复同操作系统下主分支的缓存,若主分支缓存不存在,则 fallback到同操作系统的任意Gradle缓存,最大化缓存命中率。
额外优化建议
在Gradle构建脚本中开启本地构建缓存,进一步提升构建速度:
在settings.gradle或settings.gradle.kts中添加:
// Groovy语法 buildCache { local { enabled = true } }
// Kotlin语法 buildCache { local { isEnabled = true } }
内容的提问来源于stack exchange,提问作者Kerollos Ragaie
相关产品推荐
相关产品推荐

