如何在代码的存储库中包含Gradle自动递增的版本号?

幽灵骑士

我的github公共存储库中有spring boot应用程序。我已将gradle用作此春季启动应用程序的构建工具。我正在使用詹金斯作为CI / CD。

我的build.gradle文件中包含以下任务,该文件用于自动增加内部版本号,以便生成的可执行jar在生成的jar文件中具有唯一的版本名称。

task versionIncr {
    Properties props = new Properties()
    File propsFile = new File('gradle.properties')
    props.load(propsFile.newDataInputStream())
    Integer nextbuildnum = ( ((props.getProperty('artifactBuildNumber')) as BigDecimal) + 1 )
    props.setProperty('artifactBuildNumber', nextbuildnum.toString())
    props.store(propsFile.newWriter(), null)
    props.load(propsFile.newDataInputStream())
}

我在詹金斯称这个任务如下。

“ versionIncr bootJar docker --warning-mode = all”

该任务运行良好。由于此任务的结果是在jenins服务器中发生

  1. jenkins将git $ branch拉入jenkins服务器工作区
  2. 任务=>versionIncr正在执行并增加版本号并更新"gradle.properties"jenkins服务器中存在的工作区中的文件
  3. 生成可执行的jar文件
  4. 使用新生成的可执行jar文件创建docker映像

问题::对“ gradle.properties”文件所做的更改保留在jenkins服务器工作区中,并且更新的版本号不会反映在git hub分支中。由于jenkins在本地进行了更改,因此当我将所有更改推送到github并运行jenkins作业时,"gradle.properties"文件中的版本号将保持不变。我不想每次推送提交时都手动更新版本号。我希望詹金斯为我处理版本更改。

有什么方法或gradle插件或jenkins插件可以用来将修改后的"gradle.properties"文件从jenkins工作区"github"存储库。另外,如果可能的话,我想知道使用github username/password或使用的实现方式SSH

让我知道是否需要在此处发布更多信息。

更新::发布我的build.gradle文件,以防万一有人对我的操作方式感兴趣。build.gradle

buildscript {
    repositories {
    jcenter()
    }
    dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.3.RELEASE")
    classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4+"
    }
}

plugins {
    id 'org.springframework.boot' version '2.2.7.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
    id 'maven-publish'
    id 'com.palantir.docker' version '0.25.0'
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
//apply plugin: 'io.spring.gradle.dependencymanagement.DependencyManagementPlugin'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'com.jfrog.artifactory'
apply plugin: 'maven-publish'
//apply plugin: 'org.jfrog.gradle.plugin.artifactory.ArtifactoryPlugin'

group 'com.javasree'
version project.properties.containsKey("releaseVersion") ? "${artifactMajorVersion}" : "${artifactMajorVersion}-${artifactBuildNumber}"
sourceCompatibility = 1.8

ext {
    springCloudVersion ='Greenwich.RELEASE'
    artifactName ='<artifact>'
    artifactory = 'http://localhost:8081/artifactory/'
    artifactoryRepo = 'gradle-lib-release'
    artifactorySnapShotRepo = 'gradle-lib-snashot'
    artifactoryRepo3pp = 'pub-gradle-remote'
    artifactoryUser = System.getProperty("user", "")
    artifactoryPassword = System.getProperty("password", "")
}

repositories {
    mavenCentral()
    maven {
    url "${artifactory}${artifactoryRepo3pp}"
    allowInsecureProtocol = true
    credentials {               // Optional resolver credentials (leave out to use anonymous resolution)
        username = "admin" // Artifactory user name
        password = "password" // Password or API Key
    }
    }
}

publishing.publications {
    maven(MavenPublication) {
    artifact bootJar
//      groupId 'gatewayengine'
//      artifactId artifactName
//      version '1.0-SNAPSHOT'
    from components.java
    }
}

publishing.repositories {
    maven {
    allowInsecureProtocol = true
    credentials {
        username = "admin" // Artifactory user name
        password = "password" // Password or API Key
    }
    if(project.version.endsWith('-SNAPSHOT')) {
        url "${artifactory}${artifactorySnapShotRepo}"
    } else {
        url "${artifactory}${artifactoryRepo}"
    }
    }
}

dependencyManagement {
    imports {
    mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    //mavenBom(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)
    }
}

docker {
    name "localhost:5000/${project.name}:${project.version}"
    files tasks.bootJar.outputs
    //tag 'localhost:5000/${project.name}:${project.version}'
    dockerfile file('Dockerfile')
    //buildArgs([HOST_APP_JAR_LOC: 'version'])
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web',
        'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client:2.2.2.RELEASE',
        'org.springframework.cloud:spring-cloud-starter-netflix-zuul:2.2.2.RELEASE'
}




task versionIncr {
    Properties props = new Properties()
    File propsFile = new File('gradle.properties')
    props.load(propsFile.newDataInputStream())
    Integer nextbuildnum = ( ((props.getProperty('artifactBuildNumber')) as BigDecimal) + 1 )
    props.setProperty('artifactBuildNumber', nextbuildnum.toString())
    props.store(propsFile.newWriter(), null)
    props.load(propsFile.newDataInputStream())
}
加力

之前,我已经通过2种单独的方式解决了您提出的问题。首先,通过使用Gradle插件,类似于nebula-release上面链接插件@sghill。

但是,该插件通过计算补丁版本的所有提交,通过Gradle扩展配置的主要和次要以及附加的元数据信息(例如分支名称以及是否脏)来工作。对于我而言,这似乎太复杂了,但对于不使用Gradle的项目却没有用。但是,对于您的情况,这是一种快速可用的解决方案。

就我而言,我所需要的只是在PR合并到develop或中时自动标记的master唯一版本号,以及分支上每次提交的唯一版本号。为此,我确实使用了Git标签并为此编写了一个脚本。

用于版本控制的3种情况是:

  • 一个新的未初始化的repo =>生成一个带有默认分支的新version.json文件(主版本,但可以针对每个repo进行更改,主要版本和次要版本可以配置这些功能)
  • 合并到默认分支中的所有提交都会生成一个新版本并对其进行标记。如果version.json更改了主要或次要版本,则会发生主要或次要颠簸,并将修补程序版本重置为0。
  • 分支上的唯一版本:git describe和分支名称的输出,例如0.1.0-x-branch-name,其中x是默认分支之前的提交次数。

您可以在这里找到它,而docker容器可以在这里找到

至于将Jenkins配置为对存储库具有写权限,您是否遵循此处的说明?这是我在所有回购中都成功完成的工作:使用声明性管道中的jenkins凭证进行Git推送

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在MySQL数据库中存储版本号

来自分类Dev

如何在Maven项目中实现自动递增的内部版本号?

来自分类Dev

中央存储库如何对版本号进行排序?

来自分类Dev

如何在Xcode 5中自动增加内部版本号

来自分类Dev

如何在Xcode 5中自动增加内部版本号

来自分类Dev

如何在JAR文件名中包含内部版本号?

来自分类Dev

如何在gradle中解决已解决的依赖项上剥离版本号?

来自分类Dev

在pom.xml中自动递增版本号并在应用程序中显示

来自分类Dev

使用Azure Devops在iOS应用程序中自动递增版本号

来自分类Dev

如何在POM中获取Maven版本号

来自分类Dev

如何在Java中获取Tomcat版本号

来自分类Dev

如何在Teamcity中设置内部版本号?

来自分类Dev

如何在PHP中获得最高版本号/标签

来自分类Dev

如何在OS X中获取Bash版本号

来自分类Dev

如何在Teamcity中设置内部版本号?

来自分类Dev

如何在 .Net Core 中设置默认版本号

来自分类Dev

如何在 Android 中获取 Jenkins 内部版本号?

来自分类Dev

如何从输出中获取版本号

来自分类Dev

Android 设计支持库 - 版本号和 gradle 错误

来自分类Dev

递增版本号和数据

来自分类Dev

如何从数据库的版本表中获取最大版本号?

来自分类Dev

如何在xcode> = 12.3中更改版本和内部版本号

来自分类Dev

如何在NPM版本中表示内部版本号?

来自分类Dev

如何自动增加软件包的版本号?

来自分类Dev

如何自动增加MVC 6版本号?

来自分类Dev

如何使TeamCity工件包含内部版本号?

来自分类Dev

Cordova Android应用的版本号在Gradle中的更改

来自分类Dev

Cordova Android应用的版本号在Gradle中的更改

来自分类Dev

为什么TFS内部版本号在2012年停止自动递增?

Related 相关文章

热门标签

归档