簡體   English   中英

在詹金斯管道中使用的Groovy腳本中調用Shell命令

[英]Calling shell commands in groovy script, used in Jenkins pipeline

我有一個Jenkins管道腳本,我加載了一個外部Groovy腳本,其中包含一些執行我的構建的功能。 這些功能應該很簡單,因為如果有人在本地計算機上運行構建,我也想在Jenkins之外使用它們。

在這些函數中,我需要執行shell命令並評估結果。 這在groovy調用類似

def SomeFunction() {
    def result = "Some shell command".execute().text
}

但是,這種執行方法在管道腳本中不起作用。 我不能使用“ bat / sh”,因為這僅是管道腳本,並且我希望我的函數也能以普通的方式工作。

我該如何解決?

您不應將Jenkins Pipeline Groovy視為常規的Groovy代碼。 所有Pipeline Groovy(截至目前)始終在Jenkins主服務器上執行。 .execute()永遠不會在您期望的位置執行,Jenkins腳本安全性限制將阻止您,並且Jenkins上的CPS轉換Groovy引擎都是無法在管道代碼中使用完整Groovy語言的原因。

這是斯蒂芬·康諾利(Stephen Connolly)的Google網上論壇相關文章

管道不是常規的。

它是在Groovy之上構建的CPS引擎...它看起來像Groovy,甚至有時像Groovy一樣走路和嘎嘎作響,但是如果您僅接受它不是 Groovy,您的生活將變得更加美好。

如果您想編寫慣用的Groovy,可以使用Global Shared Libraries,甚至在那里也可能遇到問題,除非您真正了解CPS的魔力及其全部含義。

使用管道作為最終的業務流程膠合層,您的生活將更加輕松

我建議您閱讀整個線程,因為它應該表明您不應將管道代碼視為普通的Groovy代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM