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

2024-02-02

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

在这些函数中,我需要执行 shell 命令并评估结果。这在 groovy 调用类似函数时效果很好

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

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

我该如何解决这个问题?


您不应该将 Jenkins Pipeline Groovy 视为常规 Groovy 代码。所有 Pipeline Groovy(截至目前)始终在 Jenkins master 上执行。.execute()永远不会在您期望的地方执行,Jenkins 脚本安全限制会阻止您,Jenkins 上的 CPS 转换 Groovy 引擎都是不期望能够在管道代码中使用完整 Groovy 语言的原因。

这里有一个来自 Google 网上论坛的相关帖子 https://groups.google.com/d/msg/jenkinsci-users/TtaIXm8OUl0/aNfY_6SNAAAJ斯蒂芬·康诺利:

管道是NOT groovy.

它是一个构建在 Groovy 之上的 CPS 引擎...它可能看起来像 Groovy,甚至有时会像 Groovy 一样行走和嘎嘎叫,但是如果您接受它,您的生活将会无限美好NOT Groovy.

如果您想编写惯用的 Groovy,那么全局共享库就是您应该去的地方,即使在那里您也可能会遇到问题,除非您真正理解 CPS 的魔力及其全部含义。

使用管道作为最终的编排粘合层,您的生活会变得更加轻松

我建议您阅读整个线程,因为它应该表明您不应将 Pipeline 代码视为普通的 Groovy 代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Jenkins 管道中使用的 groovy 脚本中调用 shell 命令 的相关文章

随机推荐

  • Backbone.js 基于url片段的状态管理/视图初始化

    我正在尝试使用 Backbone js 跟踪此应用程序中的状态 我有一个带有一组默认值的 ChartAppModel ChartAppModel Backbone Model extend defaults countries select
  • 使用 @Input 装饰器访问传递的数据

    我有一个看起来像这样的子组件 子组件 Component selector child component TemplateUrl Styles and Providers export Class ChildComponent imple
  • 离开页面时显示带有“onbeforeunload”的警告,除非单击“提交”

    如果用户尝试离开包含未保存设置的页面 我希望显示警告 但如果他们尝试保存这些设置 则显然不会 我想我的理解是错误的 因为我认为下面的内容应该有效 但事实并非如此 有人可以告诉我我做错了什么吗 谢谢 input name Submit off
  • 从控制台应用程序记录 SOAP 消息

    我正在尝试将我开发的控制台应用程序和特定第三方远程 SOAP Web 服务之间的请求和响应 原始 XML SOAP 信封 记录到数据库以进行审计 但我找不到方法来做到这一点 理想情况下我想做的是收到请求
  • EventBus、注册和registerSticky方法

    我使用 greenrobot EventBus 库在我的 android 应用程序中的两个片段之间发送数据 我想知道两者之间有什么区别register Object b 方法和registerSticky Object object met
  • Couchbase 从范围内的所有集合中检索所有文档

    是否可以在没有 N1QL 查询的情况下从某个范围内的所有集合中检索所有文档 由于数据量巨大 我们试图避免创建索引 因此无法执行 N1QL 放置此类数据的集群是归档存储 不会被频繁访问 新的 KV 范围扫描功能将执行此操作 scan 方法 h
  • 将 Spark 数据帧导出到带有标题和特定文件名的 .csv

    我正在尝试将数据从 Spark 数据帧导出到 csv 文件 df coalesce 1 write format com databricks spark csv option header true save output path 它正
  • 如何在一项活动中拥有多个 navHostFragment?

    我希望在一个活动中有三个 navHostFragment 它们都占用相同的空间 但每个都托管不同的导航图 然后使用片段管理器和底部导航栏 我想在需要时显示每个 并隐藏其他 这样就可以保持用户在每个图表中的当前位置 我目前在尝试在一项活动中使
  • 使用 MASI 距离的 NLTK 协议的低 alpha

    当我使用 MASI 作为距离函数计算 NLTK 中的一致性时 我得到的 Krippendorff alpha 值非常低 三个编码员 Inky Blinky 和 Sue 被指示根据文本的内容为两个文本 text01 和 text02 分配主题
  • 使用 Heroku、Rails 时出现 Heroku 500 错误 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在尝试使用回形针将图像上传到 S3 目前它在开发中运行得很好 但是当我将它推送到 heroku 时 我得到的状态是
  • 如何使用蓝牙查找范围内的设备?

    我是 android 新手 我想开发一个应用程序 通过编程方式使用蓝牙来查找范围内的设备 如果有人有想法 请给我一些示例代码 Find The Devices in the Range by using Bluetooth programm
  • 如何使用 numpy 计算统计数据“t 检验”

    我正在寻找有关我在 python 中创建的模型的一些统计数据 我想对其生成 t 检验 但想知道是否有一种简单的方法可以使用 numpy scipy 来执行此操作 周围有什么好的解释吗 例如 我有三个相关的数据集 如下所示 55 0 55 0
  • SUMIF 的 Google Apps 脚本替代方案

    我对 JavaScript 相当陌生 希望通过制作一些简单的脚本来进步我的学习 这些脚本将帮助我自动化一些流程 我的第一个脚本是从电子表格中查找客户的预算 以便我可以计算活动是否需要暂停 到目前为止我已经得到了这个 function mai
  • 切换回packages.config - 答案澄清

    根据规则 我必须提出一个新问题 以获得对另一个问题 答案的一些澄清 这个答案是这样的 https stackoverflow com a 45964469 305916 https stackoverflow com a 45964469
  • 带有 html 内容的 bootstrap 弹出窗口

    我试图将 bootstrap popover 内容与 html 属性分开 就像对其他组件所做的那样 但我无法让它工作
  • Composer更新和Composer全局更新之间的区别

    两者有什么区别composer update and composer global update在yii2中 这与 Yii 没有直接关系 Composer 允许您全局或每个项目 默认 安装依赖项 https getcomposer org
  • 旧代码给出“未使用的参数”错误,但以前从未出现过

    我打开了一些旧的 iOS 代码 当我尝试构建它时 我收到如下代码的 未使用参数 错误 void searchBarTextDidBeginEditing UISearchBar searchBar NSLog Search Bar isn
  • C# if-null-then-null 表达式

    只是为了好奇 方便 C 提供了我所知道的两个很酷的条件表达式功能 string trimmed input null null input Trim and string trimmed input Trim 对于我经常遇到的情况 我想念另
  • 如何在 UICollectionViewCell 中舍入 UIImageView?

    在我的 UICollectionViewCell 类中我写了这个 void layoutSubviews super layoutSubviews self myImageView layer cornerRadius CGRectGetH
  • 在 Jenkins 管道中使用的 groovy 脚本中调用 shell 命令

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