jenkins - Jenkinsfile:“RejectedAccessException:未找到此类字段”在 catch 块中
问题描述
我正在尝试将输入状态功能添加到我的 Jenkins 阶段代码中。但它正在抛出:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:找不到这样的字段:
我试图把这个块写成
catch (org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException e) {
cause = e.causes.get(0)
echo "Aborted by " + cause.getUser().toString()
if (cause.getUser().toString() != 'SYSTEM') {
startMillis = System.currentTimeMillis()
userAborted = true
} else {
endMillis = System.currentTimeMillis()
if (endMillis - startMillis >= timeoutMillis) {
echo "Approval timed out. Aborting the deployment."
userAborted = true
} else {
echo "SYSTEM aborted, but looks like timeout period didn't complete. Aborting."
userAborted = true
}
}
}
但是当我中止工作时使用此代码时,它被卡住了。
所以我用下面的代码修改: -
catch (Exception e) {
cause = e.causes.get(0)
echo "Aborted by " + cause.getUser().toString()
if (cause.getUser().toString() != 'SYSTEM') {
startMillis = System.currentTimeMillis()
userAborted = true
} else {
endMillis = System.currentTimeMillis()
if (endMillis - startMillis >= timeoutMillis) {
echo "Approval timed out. Aborting the deployment."
userAborted = true
} else {
echo "SYSTEM aborted, but looks like timeout period didn't complete. Aborting."
userAborted = true
}
}
}
现在作业在中止时不会卡住,但在作业失败时再次抛出此错误:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:找不到这样的字段:
解决方案
在检查了RejectedAccessException
(在此处找到)的 API 后,我认为问题是e.causes.get(0)
。
causes
不是一个RejectedAccessException
异常告诉你的领域,所以你显然无法访问它。
API 提供了getCause()
可以java.lang.Throwable
使用的方法:
cause = e.getCause()
顺便说一句getUser()
,也不是异常的方法,并且会抛出相同的异常。
推荐阅读
- pdf - PDF 输出中的半透明元素之间出现不需要的线条(使用 puppeteer 生成)
- javascript - 我如何在 Babylonjs 中自动旋转免费相机?
- android - 单元测试在一次运行时失败,但在我单独运行时通过
- css - 是否可以在悬停时转换 CSS 网格内单个项目的伪元素?
- r - 如何在 R Shiny 中的 SelectInput 选项中动态更新列名
- scroll - 如何通过拖动滚动条来滚动 EditText 的内容?
- vue.js - VueJS 路由器 - 使用子路由更改根目录中的命名视图
- c# - 等效于 C# .Net 中的 setPixels(int [] pixel, int offset, int stride, int x, int y, int width, int height)?
- javascript - 如何让浮动文本跟随鼠标悬停在 Two.js 创建的元素上的光标?
- sql - 从数字列中获取值会删除小数点前的 0