[英]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.