如何从checkout获取svn版本号以便在dsl中使用

时间:2016-08-25 03:56:03

标签: jenkins jenkins-pipeline

我创建了一个管道作业,并希望获得svn版本号,以便在调用shell脚本时启用进一步的下游处理。我正在使用类似于以下的管道脚本:

node {
   // Mark the code checkout 'stage'....
   stage 'Checkout'

   // Get some code from a SVM repository
   checkout(
       [
           $class: 'SubversionSCM', 
           additionalCredentials: [], 
           excludedCommitMessages: '', 
           excludedRegions: '', 
           excludedRevprop: '', 
           excludedUsers: '', 
           filterChangelog: false, 
           ignoreDirPropChanges: false, 
           includedRegions: '', 
           locations: [
               [
                   ...
                ]
            ], 
            workspaceUpdater: [$class: 'UpdateUpdater']
        ]
    )
    def svnversionnumber=${SVN_VERSION}



   sh "/.../someshellscript ${svnversionnumber};"
}

是否有关于结帐功能的文档?是否有可能获得svn修订号?我可以看到修订版输出到日志中。

7 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,但你可以使用从调用SCM checkout返回的地图来解决它。它包含SVN_REVISION的值。

// Get some code from a SVM repository
def scmVars = checkout(
  ...
)

def svnversionnumber = scmVars.SVN_REVISION

答案 1 :(得分:3)

我最终调用了一个shell来获取svn修订号,如下所示

def svnVersionNumber = sh(
    script: "svn info --show-item last-changed-revision $url",
    returnStdout: true
)

这是我能让它正常工作的唯一方法。

答案 2 :(得分:2)

build dir中有一个名为revision.txt的文件。 SubversionSCM提供了读取此文件的方法。

//Here remote returns url@revision but the revision part is across the entire repo 
//We will use the url part to get the revision for our branch

def remote = scm.locations.first().remote
def url = remote.split('@').first()

//The revision file has the revision for our branch. Parse returns a map.
def revmap = scm.parseRevisionFile(currentBuild.rawBuild)
revmap[url] 

在Jenkinsfiles上可以使用scm变量。如果您没有使用Jenkins文件,您应该能够创建scm对象并将其传递给checkout方法。

答案 3 :(得分:2)

在Groovy管道脚本中,可以将checkout scm命令的结果导入TreeMap变量,然后得到你需要的东西:

def checkoutResults = checkout([
            poll: false, 
            scm: [
                $class: 'SubversionSCM', 
                ...
            ]
        ])
echo 'checkout results' + checkoutResults.toString()
echo 'checkout revision' + checkoutResults['SVN_REVISION']
echo 'checkout revision' + checkoutResults['SVN_REVISION_1']
echo 'checkout revision' + checkoutResults['SVN_REVISION_2']

答案 4 :(得分:1)

这段代码在jenkins管道中为我工作:

String url = 'svn+ssh:...'
SVN_REVISION_IN = sh returnStdout: true, script: 'svn info --show-item last-changed-revision ' + url
currentBuild.displayName = "Rev: ${SVN_REVISION_IN}"

答案 5 :(得分:0)

我认为最好的选择之一就是使用一个简单的“#groovy”控制台脚本"获取修订号,然后放入Jenkins变量..

这样的东西给你一个想法: Link

还要看一下这个问题:Link

答案 6 :(得分:0)

Jenkins环境变量SVN_REVISION直接提供