Jenkins管道替代XmlSlurper

rod*_*ogq 5 xml jenkins jenkins-pipeline

在进入下一步之前,我需要在我的管道中创建一个步骤以获取Xml文件并更改其上的特定元素(基于变量和其他构建输出).

虽然我可以轻松地创建一个C#或Java程序,但我决定尝试在我的管道中添加一个新步骤并直接处理Xml.

XmlSlurper根据这些帖子,我面临的问题是尚未列入白名单:

目前我必须处理一些文件,这没关系.该詹金斯管道实用程序步骤提供已有的功能来读取和已经处理JSON.但是除此之外别无选择XmlSlurper.

不幸的是我正在处理一些我无法更改为JSON的工具,并且由于XML仍然被大量使用,有人知道任何替代方案XmlSlurper吗?

我宁愿不尝试手动处理这些XML,比如处理正则表达式的东西.

And*_*ray 0

将 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 的结构,但向您表明可以遍历它来获取您想要的内容。