如何使用Spring Boot,Gradle,Semantic Versioning和Jenkins生成应用程序版本

时间:2016-09-02 21:37:00

标签: gradle spring-boot semantic-versioning spring-boot-actuator spring-boot-gradle-plugin

我有一个启动了执行器的Spring Boot Web应用程序。当我打开<app_url>/info时,我会在下面看到

{
    "git": {
        "commit": {
            "time": "2016-08-31T17:53:28.000+0000",
            "id": "0a52a2f"
        },
        "branch": "master"
    },
    "build": {
        "version": "unspecified",
        "artifact": "my-app",
        "name": "my-app",
        "group": "",
        "time": "2016-09-02T21:09:42.000+0000"
    }
}

我不知道如何在这里生成版本号。我想使用语义版本控制MAJOR.MINOR.PATCH+timestamp+Build_Number

存储包的构建信息的一般共识是什么?我不想将它存储在application.yml中,因为它是由Puppet管理的,并且是应用程序之战的外部。我希望它由Jenkins生成一些文件,Spring Boot可以从该文件中获取它。我应该让Jenkins写入由build-info.properties spring-boot-gradle-plugin生成的buildInfo吗?或者Gradle本身在生成文件时是否应该生成版本? Gradle如何知道MAJOR.MINOR.PATCH详细信息?我已经没有关于如何将所有这些整合在一起的想法。

1 个答案:

答案 0 :(得分:1)

A little late, but this is how I am doing it (seems to work).

springBoot  {
    buildInfo {
        additionalProperties = [
            "version" : System.properties["version"] != null ? System.properties["version"] : "unspecified"
        ]
    }
}

and then in my Jenkins Pipeline

./gradlew clean build -Dversion=${MAJOR}.${MINOR}.${PATCH}

The output jar then will have a build-info.properties

build.version=1.0.1