Jenkins 管道抛出报告:org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException

sre*_*vas 3 groovy jenkins jenkins-plugins jenkins-pipeline

Jenkins 管道抛出报告:org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:不允许脚本使用方法 groovy.util.XmlSlurper parseText java.lang.String

这是代码:

def testsuites = new XmlSlurper().parseText(xml)
Run Code Online (Sandbox Code Playgroud)

我也无法在 ScriptApproval 中看到此方法。我们如何手动将此方法列入白名单或通过任何其他解决方案来解决此问题?

Szy*_*iak 5

我已经使用 Jenkins 2.60.3测试了您的用例,在运行使用的脚本后,new XmlSlurper().parseText(someXml)我得到了预期的异常:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method groovy.util.XmlSlurper parseText java.lang.String
    at org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.StaticWhitelist.rejectMethod(StaticWhitelist.java:175)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:137)
    at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:159)
    at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
    at WorkflowScript.run(WorkflowScript:9)
Run Code Online (Sandbox Code Playgroud)

我看到/scriptApproval我可以批准它:

在此输入图像描述

您始终可以尝试手动添加此批准。在 Jenkins 主目录中您可以找到scriptApproval.xml文件。添加:

<string>method groovy.util.XmlSlurper parseText java.lang.String</string>
Run Code Online (Sandbox Code Playgroud)

里面的<approvedSignatures>标签并重新启动詹金斯。它会产生与通过 Jenkins UI 批准此签名相同的效果。