使用Jenkins sh()函数捕获git标记命令



我希望使用git tag --list '<pattern>'命令,使用Jenkins/Groovy中的sh()函数获取与模式匹配的git标记列表。

我一直在尝试各种方法来获得git命令的全部输出,但似乎没有任何效果。

如果我将sh()函数与ls:一起使用

def ls = sh(
script: "ls",
returnStdout: true
)
println(ls)
// or
println(ls.readLines())

正如预期的那样,我得到了全部输出。

但当使用git tag命令时,我似乎总是只得到最后一个";项目";。

sh(
script: "git tag --list '${pattern}*'",
returnStdout: true
)

无论我是否使用readLines(),输出始终只是命令的最后一项

sh(
// print all items on one row instead of columns
script: "git tag --list '${pattern}*' --column=row",
returnStdout: true
)

无论是否有readLines(),都只获取最后一个项目

sh(
// pipe output to remove spaces and add in comma
script: "git tag --list '${pattern}*' | tr [:space:] ','",
returnStdout: true
)

同样,只提取最后一个项目。

如果我在本地执行这些git命令中的任何一个,我都会从每个命令中获得所需的输出和预期的输出,但无论我做什么,Jenkins似乎都只捕获最后一项。我希望我在git命令的行为中遗漏了一些明显的东西。有人知道为什么会发生这种情况,以及如何获得所有物品吗?

尝试以下操作。

def tags = sh(script: """
git fetch --all --tags > /dev/null
git --no-pager tag --list '${pattern}*'
""", returnStdout: true )
println(tags)

最新更新