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