我需要运行sh
来从Jenkins脚本中获取git标签。
sh是:
def tags = sh script: "git ls-remote --tags --refs ssh://git@bitbucket.xxx.git | cut -d'/' -f3", returnStdout: true
但似乎不起作用。不知道为什么Jenkins不会抱怨但branchNames
是空的。
遵循我要运行的内容:
ProjectUtils.addProperties([
[$class: 'ParametersDefinitionProperty',
parameterDefinitions: [
[$class: 'ExtensibleChoiceParameterDefinition',
name: 'INSTALLER_BRANCH', description: 'The set of installers to be deployed.',
editable: false,
choiceListProvider: [$class: 'SystemGroovyChoiceListProvider',
scriptText: '''
def branchNames = ['master']
def tags = sh script: "git ls-remote --tags --refs ssh://git@bitbucket.xxx.git | cut -d'/' -f3", returnStdout: true
for (tag in tags) {
branchNames.push(tag)
}
return branchNames
''',
usePredefinedVariables: true
]
]
]
]
])
我可以提前致电sh
,它可以正常工作:
stage ('installer') {
println "Checking Installer tags"
def tags = sh(returnStdout: true, script: "git ls-remote --tags --refs ssh://git@bitbucket.xxx.git | cut -d'/' -f3")
println "Installer tags:"
println tags
但是我不知道如何将变量tags
传递给脚本'''<>'''
。
任何帮助将不胜感激。
答案 0 :(得分:1)
您首先需要将标签作为字符串获取到全局变量中。然后,在choices脚本中,您需要解析该字符串并创建一个数组def tags = '$tags'.split(/\r?\n/)
。为了在脚本中引用该变量(管道脚本中的字符串本身),您需要使用双引号。
对于脚本化管道,类似这样的事情应该起作用:
def tags = ""
node {
stage ('installer') {
println "Checking Installer tags"
tags = sh(returnStdout: true, script: "git ls-remote --tags --refs ssh://git@bitbucket.gameforge.com:7999/gfclient/gfclient-installer.git | cut -d'/' -f3")
println "Installer tags:"
println tags
}
}
ProjectUtils.addProperties([
[$class: 'ParametersDefinitionProperty',
parameterDefinitions: [
[$class: 'ExtensibleChoiceParameterDefinition',
name: 'INSTALLER_BRANCH', description: 'The set of installers to be deployed.',
editable: false,
choiceListProvider: [$class: 'SystemGroovyChoiceListProvider',
scriptText: """
def branchNames = ['master']
def tags = '$tags'.split('\n')
for (tag in tags) {
branchNames.push(tag)
}
return branchNames
""",
usePredefinedVariables: true
]
]
]
]
])
或者如果您想在脚本中添加一些常规的糖:
scriptText: """
def branchNames = ['master']
def tags = '$tags'.split('\n')
tags.each {tag ->
branchNames.push(tag)
}
branchNames
""",
或者,进一步:
scriptText: """
def branchNames = ['master']
def tags = '$tags'.split(/\r?\n/)
branchNames.addAll(tags)
""",