@NonCPS 在 Jenkins 管道脚本中的作用是什么

2024-06-19

我在詹金斯中有一个管道脚本。

我曾经遇到过这个异常:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: 不允许脚本使用 groovy.json.JsonSlurperClassic 方法 parseText java.lang.String

我查找了异常,发现一些迹象表明我应该注释发生异常的方法@NonCPS。我这样做了,但并没有真正理解它的作用。

然而,在那之后,我在该方法中抛出的异常不再被捕获try clause.

那么背后的想法是什么@NonCPS?使用它有什么效果呢?


您看到的异常是由于脚本安全 https://wiki.jenkins-ci.org/display/JENKINS/Script+Security+Plugin和沙箱。基本上,默认情况下,当您运行管道脚本时,它会在沙箱中运行,该沙箱仅允许使用某些方法和类。有多种方法可以将操作列入白名单,请查看上面的链接。

The @NonCPS当您的方法使用不可序列化的对象时,注释非常有用。通常,您在管道脚本中创建的所有对象都必须是可序列化的(原因是 Jenkins 必须能够序列化脚本的状态,以便可以将其暂停并存储在磁盘上)。

当你把@NonCPS对于一个方法,Jenkins 会一次性执行整个方法,而不能暂停。此外,您不得从某个管道中引用任何管道步骤或 CPS 转换方法。@NonCPS带注释的方法。有关这方面的更多信息可以在这里找到 https://github.com/jenkinsci/workflow-cps-plugin/blob/master/README.md#technical-design.

至于异常处理:不能100%确定你遇到了什么;我已尝试以下操作并且它按预期工作:

@NonCPS
def myFunction() {
    throw new RuntimeException();
}

try {
    myFunction();
} catch (Exception e) {
    echo "Caught";
}

and

@NonCPS
def myFunction() {
    throw new RuntimeException();
}

def mySecondFunction() {
    try {
        myFunction();
    } catch (Exception e) {
        echo "Caught";
    }
}

mySecondFunction();

最后:

@NonCPS
def myFunction() {
    throw new RuntimeException();
}

@NonCPS
def mySecondFunction() {
    try {
        myFunction();
    } catch (Exception e) {
        echo "Caught";
    }
}

mySecondFunction();

按预期全部打印“Caught”。

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

@NonCPS 在 Jenkins 管道脚本中的作用是什么 的相关文章

随机推荐

  • 黄瓜与 RSpec

    我想开始深入研究 BDD 我以前从未使用过 TDD 现在 不确定我是否应该从学习 RSpec 开始 然后跳到 Cucumber 或者直接使用 Cucumber 我一直在互联网上阅读有关两者的内容 在我看来 Cucumber 可能是 RSpe
  • iPhone - 创建自定义 UITableViewCell 顶部和底部边框

    我一直在到处寻找 但还没有找到我的答案 我使用 JSON 中的动态单元格填充 UITableView 并尝试隐藏任何额外的单元格 我关闭了IB中的分隔符 当然所有的单元格分隔符都消失了 如何在每个 tableviewcell 的底部和顶部添
  • 了解 Python 2.7 中的缩进错误

    在编写 python 代码时 我往往会遇到很多缩进错误 有时 当我删除并重写该行时 错误就会消失 有人可以为菜鸟提供 python 中 IndentationErrors 的高级解释吗 以下是我在玩 CheckIO 时收到的最近 inden
  • Django User 模型,添加功能

    我想向 Django 的默认用户模型添加一个新函数 用于检索模型类型的相关列表 这样的 Foo 模型 class Foo models Model owner models ForeignKey User related name owne
  • 没有 Unicode 字节顺序标记。无法切换到 Unicode

    我正在使用 XSD 编写 XML 验证器 下面是我所做的 但是当验证器到达该线时while list Read 它给了我错误 没有 Unicode 字节顺序标记 无法切换到 Unicode 有人可以帮我解决吗 public class Va
  • Android repo 脚本创建的 .repo/projects/ 中的裸 git 存储库的用途是什么?

    The 安卓源码 http android git kernel org 由以下人员管理repo http source android com source version control html 使用 repo 同步时 一个名为 re
  • 以编程方式设置 Logback Appender 路径

    我正在尝试以编程方式设置 Logback 附加程序路径 滚动文件附加器 http logback qos ch apidocs ch qos logback core rolling RollingFileAppender html准确地说
  • Kotlin Room 数据库单例模式

    我正在尝试创建单人房间数据库 我找到了两种解决方案 但我不知道它们之间有什么区别 根据这个文件 companion object Volatile private var INSTANCE AppDatabase null fun getI
  • 对 HTTP 处理程序的同时请求不起作用

    我的 ASP Net 应用程序中有一个通用 HTTP 处理程序 ashx 它执行一些基本但耗时的计算 将进度语句打印到输出 以便让用户了解情况 执行这些计算涉及读取一些在使用处理程序时锁定的数据文件 因此对处理程序的两次调用不要立即开始处理
  • 无法通过 Android 应用程序访问我的笔记本电脑的本地主机

    因此 我在发布此内容之前做了一项研究 我发现的解决方案不起作用 更准确地说 连接到我的笔记本电脑的 IPv4192 168 XXX XXX 没用 连接到10 0 2 2 加上端口 不起作用 我需要测试使用 Django Rest 框架构建的
  • 如何使用 LazyColumn animateItemPlacement() 而不自动滚动更改?

    我正在使用一个LazyColumn以类似清单的方式 该列表首先显示所有待完成的项目 最后显示所有已完成的项目 点击一个项目可以切换它是否完成 这是我正在做的 MWE data class TodoItem val id Int val la
  • 慢速自动增量重置

    我有很多表 由于某些原因 我需要在应用程序启动时调整这些表的自动增量值 我尝试这样做 mysql gt select max id from item max id 97972232 1 row in set 0 05 sec mysql
  • Django TastyPie 地理距离查找

    我正在使用 TastyPie 进行地理距离查找 这有点困难 因为 TastyPie 官方不支持它 在 Github https gist github com 1067176 上我找到了以下代码示例 def apply sorting se
  • 如何从 python 脚本执行 7zip 命令

    我试图了解如何使用 os system 模块来执行 7zip 命令 现在我不想用 Popen 或 subprocess 让事情变得复杂 我已经安装了 7zip 并将 7zip exe 复制到我的用户文件夹中 我只想提取我的测试文件 inst
  • Pandas 字典键到列[重复]

    这个问题在这里已经有答案了 我有一个像这样的数据框 index column1 e1 u c680 5 u c681 1 u c682 2 u c57 e2 u c680 6 u c681 2 u c682 1 u c57 e3 u c68
  • 如何在提交表单之前删除自动数字格式?

    我正在使用 jQuery 插件自动数字 http www decorplanit com plugin 但是当我提交表单时 我无法删除之前字段上的格式POST 我尝试使用 input autonumeric destroy 和其他方法 但它
  • 卸载/销毁 Angular 延迟加载组件

    我的设置与此处找到的帖子类似http ify io lazy loading in angularjs http ify io lazy loading in angularjs 处理 Angular 中我的应用程序的各种组件的延迟加载 我
  • 检查列表是否包含另一个列表。 C#

    编辑 只是说 ContainsAllItem 中的注释解释得最好 很抱歉问这个问题 我知道以前有人问过这个问题 但我只是不明白 好的 所以我想检查一个列表是否包含另一个列表中的所有项目WITHOUT重叠 以及根据类字符串 名称变量 称为项目
  • 如何在 Vue 2 中使用 Vue 路由器

    我正在学习 Vue 并开始于网页包模板 https github com vuejs templates webpack tree master template src 我想做的第一件事是添加对 Vue Router 的支持 但我现在已经
  • @NonCPS 在 Jenkins 管道脚本中的作用是什么

    我在詹金斯中有一个管道脚本 我曾经遇到过这个异常 org jenkinsci plugins scriptsecurity sandbox RejectedAccessException 不允许脚本使用 groovy json JsonSl