rod*_*ogq 5 xml jenkins jenkins-pipeline
在进入下一步之前,我需要在我的管道中创建一个步骤以获取Xml文件并更改其上的特定元素(基于变量和其他构建输出).
虽然我可以轻松地创建一个C#或Java程序,但我决定尝试在我的管道中添加一个新步骤并直接处理Xml.
XmlSlurper根据这些帖子,我面临的问题是尚未列入白名单:
https://issues.jenkins-ci.org/browse/JENKINS-33024
XmlSlurper太有问题,不会得到支持.它对线程上下文类加载器问题很敏感,这可能会导致明显不相关的插件出现神秘错误.某些方法也不适合白名单.
目前我必须处理一些文件,这没关系.该詹金斯管道实用程序步骤提供已有的功能来读取和已经处理JSON.但是除此之外别无选择XmlSlurper.
不幸的是我正在处理一些我无法更改为JSON的工具,并且由于XML仍然被大量使用,有人知道任何替代方案XmlSlurper吗?
我宁愿不尝试手动处理这些XML,比如处理正则表达式的东西.
将 XML 转换为 groovy 共享库中的 json。我的共享库中的 src/org/config 中有一个名为 GroovyUtils 的类。
package org.config
import groovy.text.SimpleTemplateEngine
import java.nio.charset.StandardCharsets
import groovy.json.JsonSlurper
import org.json.JSONObject
import org.json.XML
import java.util.ArrayList
import hudson.model.*;
public class GroovyUtils implements Serializable {
def engine = new SimpleTemplateEngine()
def config
def steps
def GroovyUtils(config, steps) {
this.config = config
this.steps = steps
}
def log(msg){
steps.println(msg)
}
def getFinalAttr(thingToSearchFor){
def fileContents = new File("YourXMLFile.xml").text;
def json = xmlToJson(fileContents);
def jsonObj = new JsonSlurper().parseText(json)
def foo = jsonObj["someAttr"].someArr["anotherArr"]
def bar = foo.find { it.name == thingToSearchFor }
return bar.finalAttr
}
def xmlToJson(input) {
JSONObject xmlJSONObj = XML.toJSONObject(input)
return xmlJSONObj.toString(2)
}
}
Run Code Online (Sandbox Code Playgroud)
上面的关键方法是 getFinalAttr(thingToSearchFor)。
对 foo 和 bar 局部变量的赋值将取决于 jsonObj 的结构,但向您表明可以遍历它来获取您想要的内容。