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

如何在build.gradle.kts中编写任务供Jenkins获取项目版本

解决Gradle版本号统一维护与Jenkins动态获取的问题

问题背景

我基于Java 17 + Groovy格式的build.gradle开发项目,通过Jenkins流水线实现自动部署,其中一个核心阶段是构建带版本号的Docker镜像并上传至Nexus用于内部管控。目前创建新分支时,需要同时修改build.gradle和Jenkinsfile中的版本号,重复操作效率低下,希望仅在build.gradle中维护版本号,通过Gradle任务将版本号提供给Jenkinsfile调用。之前尝试了一个Kotlin风格的任务,但实际项目使用的是Groovy格式的build.gradle,需要调整适配。

解决方案

1. 适配Groovy DSL的版本输出任务

将之前的Kotlin任务修改为Groovy版本,建议直接输出纯版本号(避免多余字符干扰Jenkins解析):

tasks.register("printVersion") {
    doLast {
        println version
    }
}

如果需要输出version=xxx的键值对格式也可以,但后续Jenkins解析需对应处理,纯版本号的形式更简洁直接。

2. 修改Jenkinsfile动态拉取版本号

移除硬编码的VERSION变量,改为执行Gradle任务捕获版本号:

pipeline {
    environment {
        VERSION = sh(script: './gradlew printVersion -q', returnStdout: true).trim()
    }
    stage('Build Docker image') {
        when {
            expression {
               env.BRANCH_NAME.contains("release/")
            }
        }
        steps {
            script {
                echo "构建Docker镜像,版本号:${VERSION}"
                docker.withRegistry('http://localhost:8083', 'nexus-credentials') {
                    def customImage = docker.build("project-name:${VERSION}")
                    customImage.push()
                }
            }
        }
    }
}

关键细节说明:

  • -q参数:启用Gradle静默模式,仅输出任务的打印内容,过滤Gradle自带的冗余日志,确保获取到纯净的版本号
  • .trim():去除输出内容的换行符,避免版本号带空格或换行导致Docker镜像标签异常
  • 替换find为contains:更准确地判断分支是否属于release分支

3. 验证流程

  1. 本地执行./gradlew printVersion -q,确认输出与build.gradle中设置的版本号一致
  2. 将Gradle任务的修改提交至代码仓库
  3. 触发Jenkins流水线,检查日志中是否正确打印版本号,且Docker镜像标签与build.gradle中的版本保持一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:13:16