如何从结帐处获取svn版本号以用于dsl



我创建了一个管道作业,并希望获得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};"
}

是否有关于checkout功能的文档?有可能拿到svn的修订号吗?

我有同样的问题,但是您可以通过使用调用SCM签出返回的映射来解决它。它包含一个SVN_REVISION的值。

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

在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']

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

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

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

这段代码在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}"

在构建目录中有一个名为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] 

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

我认为最好的选择之一是使用一个简单的小"groovy控制台脚本"来获取版本号,然后放入Jenkins变量。

像这样给你一个想法:链接

再看看这个问题:Link

最新更新