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()。
待排查问题
- 问题根源是什么?
- 为何构建始终回退到Gradle 3.5 Wrapper?该如何修改?项目Grails5分支中无3.5版本的引用。
- 是否存在遗漏的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升级更新。
- 即使代码中没有3.5版本的引用,Jenkins构建节点的
- 修复步骤:
- 本地重新生成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可能的问题。
- 本地重新生成Gradle 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
相关产品推荐
相关产品推荐

