我有一个Jenkins管道脚本,我加载了一个外部Groovy脚本,其中包含一些执行构建的函数。 这些函数应该是简单的常规,因为如果有人在某个地方的计算机上运行构建,我也想在Jenkins之外使用它们。
在这些函数中,我需要执行shell命令并评估结果。这在groovy调用像
这样的函数时工作正常def SomeFunction() {
def result = "Some shell command".execute().text
}
但是,这种执行方法在管道脚本中不起作用。 我不能使用“bat / sh”,因为这只是管道脚本,我希望我的函数也可以在普通的groovy中工作。
我该如何解决这个问题?
答案 0 :(得分:3)
您不应将Jenkins Pipeline Groovy视为常规Groovy代码。所有Pipeline Groovy(截至目前)始终在Jenkins主服务器上执行。 .execute()
将永远不会执行您期望的位置,Jenkins脚本安全限制将阻止您,并且Jenkins上的CPS转换Groovy引擎都是不期望能够在管道代码中使用完整Groovy语言的理由。
以下是Stephen Connolly的relevant post from Google Groups:
管道不 groovy。
它是一个构建在Groovy之上的CPS引擎......它可能看起来像Groovy,有时甚至可能像Groovy一样走路和嘎嘎,但如果你只是接受 NOT,你的生活会无限好 Groovy。
如果您想编写惯用的Groovy,那么全球共享库就是您的目标,即使您真的了解CPS魔术及其全部含义,也可以解决问题。
使用管道作为最终的编排胶层,您的生活将更加轻松
我建议您阅读整个帖子,因为它应该证明您不应该将Pipeline代码视为普通的Groovy代码。