我的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服务器中发生
versionIncr
正在执行并增加版本号并更新"gradle.properties"
jenkins服务器中存在的工作区中的文件问题::对“ 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种情况是:
version.json
更改了主要或次要版本,则会发生主要或次要颠簸,并将修补程序版本重置为0。git describe
和分支名称的输出,例如0.1.0-x-branch-name
,其中x
是默认分支之前的提交次数。至于将Jenkins配置为对存储库具有写权限,您是否遵循此处的说明?这是我在所有回购中都成功完成的工作:使用声明性管道中的jenkins凭证进行Git推送
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句