在Grokins管道中使用的groovy脚本中调用shell命令

时间:2017-12-12 17:19:57

标签: shell jenkins groovy jenkins-pipeline execute

我有一个Jenkins管道脚本,我加载了一个外部Groovy脚本,其中包含一些执行构建的函数。 这些函数应该是简单的常规,因为如果有人在某个地方的计算机上运行构建,我也想在Jenkins之外使用它们。

在这些函数中,我需要执行shell命令并评估结果。这在groovy调用像

这样的函数时工作正常
def SomeFunction() {
    def result = "Some shell command".execute().text
}

但是,这种执行方法在管道脚本中不起作用。 我不能使用“bat / sh”,因为这只是管道脚本,我希望我的函数也可以在普通的groovy中工作。

我该如何解决这个问题?

1 个答案:

答案 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代码。