自增发布版本 Jenkins
Auto-increment release version Jenkins
我有一个在 Jenkins 中构建的应用程序,我想将其部署到 Octopus。当我这样做时,我必须创建一个发送到八达通的发布版本。对于这个发布版本,我必须给出一个数字(例如:"C:\Octopus\Octo.exe" create-release --project APP --version 4.8 --packageversion=4.8
)
我怎样才能使版本号自动递增? (例如:我已经构建了应用程序并在 Octopus 中创建了版本号 4.8,下次构建应用程序时我想创建版本号 4.9)
谢谢
Jenkins 提供了一些 environment variables 可用于每个构建命令;其中之一是内部版本号,数量在增加。
如果您可以容纳版本号中的漏洞,请更改您的版本以包含内部版本号,例如 4.8-142,其中 142 是来自 jenkins 的内部版本号。这使您在 semver 意义上增加了版本号,并且仍然让您以更实用的方式控制真实版本。
如果您对版本中的构建号不满意,那么您应该有一个 post 构建脚本来更新版本号并将其存储在某个文件中。然后,您可以使用 EnvInject plugin or using a parametrized build.
注入该文件内容
您可以使用作业 属性 来存储版本,然后使用以下脚本(由 "Execute system groovy script" 构建步骤执行)在每个 运行 上更新它:
import jenkins.model.Jenkins
import hudson.model.*
def jenkins = Jenkins.getInstance()
def jobName = "yourJobName"
String versionType = "minor"
def job = jenkins.getItem(jobName)
//get the current version parameter and update its default value
paramsDef = job.getProperty(ParametersDefinitionProperty.class)
if (paramsDef) {
paramsDef.parameterDefinitions.each{
if("version".equals(it.name)){
println "Current version is ${it.defaultValue}"
it.defaultValue = getUpdatedVersion(versionType, it.defaultValue)
println "Next version is ${it.defaultValue}"
}
}
}
//determine the next version by the required type
//and incrementing the current version
def getUpdatedVersion(String versionType, String currentVersion){
def split = currentVersion.split('\.')
switch (versionType){
case "minor.minor":
split[2]=++Integer.parseInt(split[2])
break
case "minor":
split[1]=++Integer.parseInt(split[1])
break;
case "major":
split[0]=++Integer.parseInt(split[0])
break;
}
return split.join('.')
}
使用 Jenkins 插件的 version Number 插件,它应该给你一个环境变量作为 virsion number see more in this URL
如果您从 git 存储库进行部署,您可能已经在为每个版本创建标签(或者您至少应该这样做,以便您可以更轻松地跟踪部署的内容)。如果是这种情况,您可以从这些标签中导出下一个发布版本,而无需将版本存储在其他任何地方(只需确保 Jenkins 正在获取高级克隆行为中的标签)。
然后,你可以这样计算下一个版本:
def nextVersionFromGit(scope) {
def latestVersion = sh(returnStdout: true, script: 'git describe --tags --abbrev=0 --match *.*.* 2> /dev/null || echo 0.0.0').trim()
def (major, minor, patch) = latestVersion.tokenize('.').collect { it.toInteger() }
def nextVersion
switch (scope) {
case 'major':
nextVersion = "${major + 1}.0.0"
break
case 'minor':
nextVersion = "${major}.${minor + 1}.0"
break
case 'patch':
nextVersion = "${major}.${minor}.${patch + 1}"
break
}
nextVersion
}
此方法使用 Semantic Versioning 格式,但如果您想要只有 2 个数字的版本,可以轻松调整。
我用了下面这一段:
export RELEASE_VERSION=$(jx-release-version)
git tag -fa v${RELEASE_VERSION} -m 'Release version ${RELEASE_VERSION}'
git push origin v${RELEASE_VERSION}
https://www.jenkins.io/projects/gsoc/2021/project-ideas/semantic-release-version/
我有一个在 Jenkins 中构建的应用程序,我想将其部署到 Octopus。当我这样做时,我必须创建一个发送到八达通的发布版本。对于这个发布版本,我必须给出一个数字(例如:"C:\Octopus\Octo.exe" create-release --project APP --version 4.8 --packageversion=4.8
)
我怎样才能使版本号自动递增? (例如:我已经构建了应用程序并在 Octopus 中创建了版本号 4.8,下次构建应用程序时我想创建版本号 4.9)
谢谢
Jenkins 提供了一些 environment variables 可用于每个构建命令;其中之一是内部版本号,数量在增加。
如果您可以容纳版本号中的漏洞,请更改您的版本以包含内部版本号,例如 4.8-142,其中 142 是来自 jenkins 的内部版本号。这使您在 semver 意义上增加了版本号,并且仍然让您以更实用的方式控制真实版本。
如果您对版本中的构建号不满意,那么您应该有一个 post 构建脚本来更新版本号并将其存储在某个文件中。然后,您可以使用 EnvInject plugin or using a parametrized build.
注入该文件内容您可以使用作业 属性 来存储版本,然后使用以下脚本(由 "Execute system groovy script" 构建步骤执行)在每个 运行 上更新它:
import jenkins.model.Jenkins
import hudson.model.*
def jenkins = Jenkins.getInstance()
def jobName = "yourJobName"
String versionType = "minor"
def job = jenkins.getItem(jobName)
//get the current version parameter and update its default value
paramsDef = job.getProperty(ParametersDefinitionProperty.class)
if (paramsDef) {
paramsDef.parameterDefinitions.each{
if("version".equals(it.name)){
println "Current version is ${it.defaultValue}"
it.defaultValue = getUpdatedVersion(versionType, it.defaultValue)
println "Next version is ${it.defaultValue}"
}
}
}
//determine the next version by the required type
//and incrementing the current version
def getUpdatedVersion(String versionType, String currentVersion){
def split = currentVersion.split('\.')
switch (versionType){
case "minor.minor":
split[2]=++Integer.parseInt(split[2])
break
case "minor":
split[1]=++Integer.parseInt(split[1])
break;
case "major":
split[0]=++Integer.parseInt(split[0])
break;
}
return split.join('.')
}
使用 Jenkins 插件的 version Number 插件,它应该给你一个环境变量作为 virsion number see more in this URL
如果您从 git 存储库进行部署,您可能已经在为每个版本创建标签(或者您至少应该这样做,以便您可以更轻松地跟踪部署的内容)。如果是这种情况,您可以从这些标签中导出下一个发布版本,而无需将版本存储在其他任何地方(只需确保 Jenkins 正在获取高级克隆行为中的标签)。
然后,你可以这样计算下一个版本:
def nextVersionFromGit(scope) {
def latestVersion = sh(returnStdout: true, script: 'git describe --tags --abbrev=0 --match *.*.* 2> /dev/null || echo 0.0.0').trim()
def (major, minor, patch) = latestVersion.tokenize('.').collect { it.toInteger() }
def nextVersion
switch (scope) {
case 'major':
nextVersion = "${major + 1}.0.0"
break
case 'minor':
nextVersion = "${major}.${minor + 1}.0"
break
case 'patch':
nextVersion = "${major}.${minor}.${patch + 1}"
break
}
nextVersion
}
此方法使用 Semantic Versioning 格式,但如果您想要只有 2 个数字的版本,可以轻松调整。
我用了下面这一段:
export RELEASE_VERSION=$(jx-release-version)
git tag -fa v${RELEASE_VERSION} -m 'Release version ${RELEASE_VERSION}'
git push origin v${RELEASE_VERSION}
https://www.jenkins.io/projects/gsoc/2021/project-ideas/semantic-release-version/