自动增量发布版本Jenkins

时间:2016-06-08 11:34:15

标签: jenkins jenkins-plugins

我有一个在Jenkins中构建的应用程序,我想部署到Octopus。当我这样做时,我必须创建一个发送到Octopus的发布版本。对于此版本,我必须提供一个数字(例如:"C:\Octopus\Octo.exe" create-release --project APP --version 4.8 --packageversion=4.8

如何使版本号自动递增? (例如:我已经构建了应用程序并在Octopus中创建了版本号4.8,下次我构建应用程序时我想创建版本号4.9)

谢谢

5 个答案:

答案 0 :(得分:7)

您可以使用作业属性来存储版本,然后使用以下脚本在每次运行时更新它(由&#34执行;执行系统groovy脚本"构建步骤):

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('.')
}

答案 1 :(得分:4)

Jenkins为每个构建命令提供了一些environment variables;其中一个是内部版本号,越来越多。

如果您可以使用版本号中的漏洞,请更改您的版本以包含内部版本号,例如4.8-142,其中142是来自jenkins的内部版本号。这使您可以在semver意义上增加版本号,并且仍然可以让您以更实用的方式控制真实版本。

如果您对版本中的内部版本号不满意,那么您应该有一个后期构建脚本来更新版本号并将其存储在某个文件中。然后,您可以使用EnvInject plugin或使用parametrized build注入该文件内容。

答案 2 :(得分:1)

使用Jenkins插件中的版本号插件,它应该为您提供一个环境变量以用作版本号,请参阅此URL

答案 3 :(得分:1)

我在下面使用了这件作品:

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/

答案 4 :(得分:0)

如果您正在从git repo进行部署,则可能已经为每个发行版创建了标签(或者至少应该这样做,以便可以更轻松地跟踪部署的内容)。在这种情况下,您可以从这些标签中获得下一个发行版本,而不必将版本存储在其他任何地方(只需确保Jenkins以高级克隆行为获取标签)。

然后,您可以使用以下内容计算下一个版本:

def nextVersionFromGit(scope) {
    def latestVersion = sh returnStdout: true, script: 'git describe --tags "$(git rev-list --tags=*.*.* --max-count=1 2> /dev/null)" 2> /dev/null || echo 0.0.0'
    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个数字的版本,则可以轻松地进行调整。