gpt4 book ai didi

xml - XmlSlurper 的 Jenkins 管道替代方案

转载 作者:数据小太阳 更新时间:2023-10-29 01:59:16 26 4
gpt4 key购买 nike

我需要在我的管道中创建一个步骤来获取 Xml 文件并更改其中的特定元素(基于变量和其他构建输出),然后再进行下一步。

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

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

  • https://issues.jenkins-ci.org/browse/JENKINS-33024

    XmlSlurper is too problematic and will not be supported. It is sensitive to thread context class loader issues, which can cause mysterious errors from apparently unrelated plugins. Certain methods are also inappropriate to whitelist.

目前我要处理一些文件,还可以。Jenkins Pipeline Utility Steps已经提供了一些函数来读取和处理 JSON。但是 XmlSlurper 或任何与之相关的东西别无选择。

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

我宁愿不尝试手动处理那些 XML,比如处理正则表达式。

最佳答案

在 groovy 的共享库中将 XML 转换为 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)
}
}

上面的关键方法是getFinalAttr(thingToSearchFor)。

对 foo 和 bar 局部变量的赋值将取决于您的 jsonObj 的结构,但向您表明可以遍历它以获得您想要的内容。

关于xml - XmlSlurper 的 Jenkins 管道替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47770142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com