Jenkins XmlParser reports No such field found for attribute for root node
我有一个包含以下 XML 文件的项目(Cordova 项目的 config.xml)...
1 2 3 4 5 6 | <?xml version='1.0' encoding='utf-8'?> <widget android-versionCode="16" id="com.mycomp.myapp" ios-CFBundleVersion="15" version="1.3.0.b4" windows-packageVersion="1.2.6.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> <name>My App</name> <description>My app description</description> mycom.com.au</author> .... |
我要做的就是读取根元素 (
我的 Jenkins 文件脚本中有以下内容...
1 2 3 4 5 6 | script { def xml = readFile"${env.WORKSPACE}/config.xml" def rootNode = new XmlParser().parseText(xml) def version = rootNode.@version echo 'version is...' echo version |
但是当我运行它时,我得到以下错误..
1 2 3 4 5 6 | org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: No such field found: field groovy.util.Node version at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.unclassifiedField(SandboxInterceptor.java:425) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetAttribute(SandboxInterceptor.java:436) at org.kohsuke.groovy.sandbox.impl.Checker$8.call(Checker.java:370) at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetAttribute(Checker.java:375) at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getAttribute(SandboxInvoker.java:37) |
我试过
有人知道上面有什么问题吗?
提前致谢
[编辑1]
如果我使用以下...
1 2 3 4 5 | def xml = readFile"${env.WORKSPACE}/config.xml" def rootNode = new XmlParser().parseText(xml) def version = rootNode.text() echo 'version is...' echo version |
它打印出
[EDIT2]
我尝试使用以下..
1 2 | def rootNode = new XmlSlurper().parse("${env.WORKSPACE}/config.xml") def version = rootNode.@'version' |
但我仍然遇到类似的错误...
1 2 3 4 5 6 7 8 9 | org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: No such field found: field groovy.util.slurpersupport.NodeChild version at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.unclassifiedField(SandboxInterceptor.java:425) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetAttribute(SandboxInterceptor.java:436) at org.kohsuke.groovy.sandbox.impl.Checker$8.call(Checker.java:370) at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetAttribute(Checker.java:375) at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getAttribute(SandboxInvoker.java:37) at com.cloudbees.groovy.cps.impl.AttributeAccessBlock.rawGet(AttributeAccessBlock.java:20) at WorkflowScript.run(WorkflowScript:15) at ___cps.transform___(Native Method) |
如果我调用
编辑:
我在能够修改属性的上下文中进行了更多测试,发现在使用
我们可以简单地使用
1 2 | def rootNode = new XmlParser().parseText(xml) println rootNode['@version'] |
原答案:
似乎有一些关于使用脚本沙箱的 groovy.util.Node 对象上的
一种解决方法是使用
1 2 | def rootNode = new XmlParser().parseText(xml) println rootNode.attributes()['version'] |
这将导致第一次运行失败并提示您批准使用