You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps CI中Gradle增量构建配置失效问题排查

Azure DevOps中Gradle增量构建失效的问题排查与解决

你遇到的核心问题是缓存错了目录,以及对Gradle两种缓存的概念混淆:

1. 先理清Gradle的两种缓存

  • 依赖缓存:存在$GRADLE_HOME/caches(或$GRADLE_USER_HOME/caches),用来缓存下载的依赖包、插件,只加快依赖下载速度,不会让构建任务跳过。
  • 构建任务缓存(Build Cache):这才是让Gradle跳过已完成任务的关键,默认存储在项目根目录的.gradle/build-cache下,需要显式启用才能生效。

你之前只缓存了依赖缓存目录,所以Azure DevOps上的构建任务无法命中缓存,自然不会跳过任何任务。

2. 正确配置步骤

(1)启用Gradle构建缓存

三种方式选其一即可:

  • 构建命令添加参数:gradle build --build-cache
  • 在项目settings.gradle中配置:
    buildCache {
        local {
            directory = file("$rootDir/.gradle/build-cache") // 指定本地构建缓存路径
        }
    }
    
  • 在gradle.properties中添加:org.gradle.caching=true

(2)在Azure DevOps中缓存构建缓存目录

用Azure DevOps的Cache@2任务,缓存项目的.gradle/build-cache目录,示例YAML配置:

- task: Cache@2
  inputs:
    key: 'gradle | "$(Agent.OS)" | build-cache'
    restoreKeys: |
       gradle | "$(Agent.OS)"
    path: '$(Build.SourcesDirectory)/.gradle/build-cache'
  displayName: '缓存Gradle构建任务缓存'

如果还想优化依赖下载速度,可以额外缓存依赖缓存目录:

- task: Cache@2
  inputs:
    key: 'gradle | "$(Agent.OS)" | gradle.properties | build.gradle'
    restoreKeys: |
       gradle | "$(Agent.OS)"
    path: '$(GRADLE_USER_HOME)/caches/modules-2'
  displayName: '缓存Gradle依赖包'

(3)确保环境一致性

构建任务的缓存命中依赖输入输出的哈希值,如果Azure代理环境和本地不一致,会导致哈希不匹配:

  • 检查Azure上的Gradle版本、JDK版本和本地完全一致
  • 确保构建脚本中没有依赖代理特有的环境变量或文件路径

(4)验证缓存生效

在Azure DevOps构建日志中搜索“Build cache”,如果看到“Loaded cache entry for task”字样,说明缓存已生效;也可以添加--info参数运行构建,查看详细日志分析未命中原因。

内容的提问来源于stack exchange,提问作者Matthias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:55:23