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

Jenkins构建Grails5项目始终回退至Gradle3.5Wrapper问题排查

关于Grails 5.3.2项目Jenkins构建回退到Gradle 3.5的问题排查

问题背景

我尝试用SDKMan提供的SDK构建Grails 5.3.2项目,但Jenkins构建时报错,提示无法使用Gradle 3.5发行版执行构建。

尽管已经在构建脚本中配置并确认使用Java 11.0.12-open、Grails 5.3.2、Gradle 7.5.1,且gradle.properties中设置gradleWrapperVersion=7.5.1,gradle-wrapper.properties指定了Gradle 7.5.1的分发URL,构建日志也显示已应用这些版本,但仍出现Gradle 3.5相关的警告。

该项目此前基于Grails 3版本,使用Gradle 3.5构建成功,为避免旧项目影响,已在Jenkinsfile的Build阶段添加cleanWs()。

待排查问题

  1. 问题根源是什么?
  2. 为何构建始终回退到Gradle 3.5 Wrapper?该如何修改?项目Grails5分支中无3.5版本的引用。
  3. 是否存在遗漏的Jenkins配置项?

问题分析与解决

1. 问题根源

大概率是Gradle Wrapper缓存未清理干净,或者Jenkins构建过程中仍在调用旧的Wrapper文件。虽然代码里更新了配置文件,但Jenkins节点上可能残留旧的gradlew脚本或Wrapper缓存,导致构建时优先调用旧版本。另外,Grails 5.x对Gradle版本有严格要求(必须7.x以上),旧的Gradle 3.5不兼容,因此直接报错。

2. 回退到Gradle 3.5 Wrapper的原因及修复

  • 原因:
    • 即使代码中没有3.5版本的引用,Jenkins构建节点的$HOME/.gradle/wrapper/dists目录可能还缓存了Gradle 3.5的分发包,若旧的gradlew脚本未被替换,构建时会拉取旧版本。
    • 可能Jenkins构建步骤中仍在调用项目根目录遗留的Grails 3时代的gradlew脚本,该脚本未随Grails 5升级更新。
  • 修复步骤:
    • 本地重新生成Gradle Wrapper:在项目根目录执行gradle wrapper --gradle-version 7.5.1,生成最新的gradlew、gradlew.bat及gradle/wrapper目录下的文件,提交到Grails5分支。
    • Jenkins构建前清理节点缓存:在Jenkinsfile的Build阶段添加步骤,执行rm -rf $HOME/.gradle/wrapper/dists/gradle-3.5*(Linux节点)或对应Windows命令,彻底删除旧缓存。
    • 调整构建调用方式:构建时直接使用SDKMan指定的Gradle 7.5.1,比如执行sdks gradle 7.5.1 && gradle build,绕过Wrapper可能的问题。

3. 可能遗漏的Jenkins配置项

  • 全局工具配置:检查Jenkins全局工具配置中,是否为Gradle 7.5.1设置了正确别名,且构建任务指定使用该版本,而非默认Gradle或项目Wrapper。
  • Workspace清理验证:确认cleanWs()生效,或直接在构建前添加sh 'rm -rf .gradle/'(Linux)强制清理项目本地的Gradle缓存目录。
  • SDKMan环境验证:确保Jenkins节点正确加载SDKMan环境变量,构建时能切换到指定版本。可添加sh 'sdk current java && sdk current gradle'步骤验证版本是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:02:03