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

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文件:

  1. 修改build.gradle,从gradle.properties读取版本:
// build.gradle
version = rootProject.version
  1. 在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}") 
    }
  }
}
  1. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:01:18