Jenkins Pipeline抛出RejectedAccessException,如何白名单XmlSlurper的parseText方法?
Jenkins Pipeline XmlSlurper parseText 权限问题解决方案
这个问题我之前也碰到过,确实挺头疼的——明明ScriptApproval界面里搜不到对应的方法签名,Pipeline却一直抛出org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException。下面给你几个靠谱的解决办法:
方法一:手动修改ScriptApproval配置文件
如果UI里找不到要授权的方法,直接修改配置文件是最直接的方式:
- 找到Jenkins的主目录(默认是
~/.jenkins或者/var/lib/jenkins,具体看你的部署环境) - 打开目录下的
scriptApproval.xml文件 - 在
<approvedSignatures>标签内添加一行:<string>method groovy.util.XmlSlurper parseText java.lang.String</string> - 保存文件后,重启Jenkins服务,权限就会生效。
方法二:通过Jenkins脚本控制台授权
不用改文件,直接在Jenkins后台执行Groovy脚本就能完成授权:
- 进入Jenkins的脚本控制台(路径:Manage Jenkins -> Script Console)
- 粘贴并执行以下代码:
def scriptApproval = Jenkins.instance.getExtensionList('org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.ScriptApproval')[0] def targetSignature = 'method groovy.util.XmlSlurper parseText java.lang.String' if (!scriptApproval.isApproved(targetSignature)) { scriptApproval.approveSignature(targetSignature) println "已成功授权方法签名:${targetSignature}" } else { println "该方法签名已经被授权过了" } - 执行完成后,无需重启Jenkins,直接重新运行Pipeline即可。
方法三:使用共享库绕过沙箱限制
如果你不想修改全局的权限设置,可以把XML解析逻辑放到Jenkins共享库中:
- 创建一个Jenkins共享库,将使用
XmlSlurper.parseText()的代码写在共享库的类或者脚本里 - 在Jenkins全局配置(Manage Jenkins -> Configure System)中,找到Global Pipeline Libraries,添加你的共享库,并勾选Trusted选项
- 在Pipeline中引用这个共享库,调用里面的XML解析方法即可——因为受信任的共享库不受沙箱权限限制,不需要单独授权方法。
内容的提问来源于stack exchange,提问作者sreenivas
相关产品推荐
相关产品推荐

