Jenkins自动化场景下,如何用类似npm version的Gradle命令升级版本?
Jenkins Gradle项目版本自动化升级问题
现状
- 已完成Node项目的版本自动化升级,使用
npm version {version}命令实现 - 已通过以下Groovy代码成功获取
build.gradle中的当前版本:
dir('examples/gradle'){ def version = sh(returnStdout: true, script: "cat build.gradle | grep -o 'project.version = [^,]*'")?.trim() gradleProjectVersion = version.split(/=/)[1].trim() }
需求
需要实现类似npm version {version}的功能,用已获取到的分支版本值newProjectVersion自动升级Gradle项目版本,完成后提交Git。
失败的尝试
之前尝试通过Gradle参数传递版本,但未成功修改build.gradle:
dir('examples/gradle'){ docker.image('gradle:6.8-jdk11').inside('-v /gradle:/home/gradle/.gradle/caches'){ sh(script: "gradle -PprojVersion=${newProjectVersion}") } sh("git add .") sh("git commit -m \"chore(build.gradle): bump version to ${newProjectVersion}\"") }
可行解决方案
方案1:直接文本替换build.gradle(简单高效)
利用shell命令直接替换build.gradle中的版本行,无需修改Gradle配置:
dir('examples/gradle'){ // 用sed替换project.version的值,适配带引号的版本格式 sh("sed -i 's/project.version = .*/project.version = \"${newProjectVersion}\"/' build.gradle") // 提交Git变更 sh("git add build.gradle") sh("git commit -m \"chore(build.gradle): bump version to ${newProjectVersion}\"") }
注意:如果你的版本格式不带引号,把命令里的\"去掉即可,确保匹配build.gradle中的实际写法。
方案2:Gradle原生版本管理(规范持久)
更符合Gradle最佳实践的方式是把版本集中管理在gradle.properties文件:
- 修改
build.gradle,从gradle.properties读取版本:
// build.gradle version = rootProject.version
- 在
build.gradle中添加自定义任务更新版本:
// build.gradle task updateVersion { doLast { def propsFile = file('gradle.properties') def props = new Properties() // 读取现有配置或创建新文件 if (propsFile.exists()) { propsFile.withInputStream { props.load(it) } } // 更新版本属性 props.setProperty('version', project.projVersion) // 写入文件 propsFile.withOutputStream { props.store(it, "Updated version to ${project.projVersion}") } } }
- Jenkins中执行任务更新版本:
dir('examples/gradle'){ docker.image('gradle:6.8-jdk11').inside('-v /gradle:/home/gradle/.gradle/caches'){ sh(script: "gradle updateVersion -PprojVersion=${newProjectVersion}") } sh("git add gradle.properties") sh("git commit -m \"chore(gradle.properties): bump version to ${newProjectVersion}\"") }
内容的提问来源于stack exchange,提问作者Imotec
相关产品推荐
相关产品推荐

