Jenkins-如何设置XML属性,然后写回XML文件
在我上一篇文章中,我学习了如何读取XML属性,接下来我的最后一项任务是设置属性,例如,我将增加读取属性,然后写回 所以,我有下面的XML文件Jenkins-如何设置XML属性,然后写回XML文件,jenkins,jenkins-pipeline,jenkins-groovy,Jenkins,Jenkins Pipeline,Jenkins Groovy,在我上一篇文章中,我学习了如何读取XML属性,接下来我的最后一项任务是设置属性,例如,我将增加读取属性,然后写回 所以,我有下面的XML文件 <?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
<?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>
<author>mycom.com.au</author>
但以下几点会
def version = rootNode.attributes()['version']
我现在似乎有同样的问题写回属性
下面我尝试了下面的设置属性
def filePath = "${env.WORKSPACE}/config.xml"
def xml = readFile filePath
def rootNode = new XmlParser().parseText(xml)
rootNode.@version = "12345"
def writer = new FileWriter(filePath)
new XmlNodePrinter(new PrintWriter(writer)).print(rootNode)
但我得到了一个类似的错误,当我试图读取属性
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.onSetAttribute(SandboxInterceptor.java:447)
at org.kohsuke.groovy.sandbox.impl.Checker$9.call(Checker.java:405)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedSetAttribute(Checker.java:411)
我确实在Groovey游乐场尝试过这个,它看起来确实有效,但在Jenkins这里不行
因此,看起来@version
语法再次不起作用,我只是无法调用其他调用(就像获取属性一样)来设置属性
有人对如何做到这一点有什么想法吗
提前感谢您的帮助。在我发现了更多的测试之后,我们可以简单地使用
[]
访问中的@
选择器(Edit:Its called),似乎脚本沙盒可以处理这个问题。它可以翻译为发动机罩下的getAt()
和putAt()
,詹金斯将允许其获得批准
node(){
def xml=readFile“${env.WORKSPACE}/config.xml”
def rootNode=new XmlParser().parseText(xml)
打印根节点['@version']
rootNode['@version']=123
打印根节点['@version']
}
结果
Running on Jenkins in /var/jenkins_home/workspace/xmltest
[Pipeline] {
[Pipeline] readFile
[Pipeline] echo
1.3.0.b4
[Pipeline] echo
123
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
我还更新了您关于属性访问的其他问题。再次非常感谢!以上工作100%!我将为将来记下这些语法。
Running on Jenkins in /var/jenkins_home/workspace/xmltest
[Pipeline] {
[Pipeline] readFile
[Pipeline] echo
1.3.0.b4
[Pipeline] echo
123
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS