在Jenkins管道中解析XML文件

我有一个XML文件,我想将其用作管道脚本的输入。问题是XMLParser不可序列化,因此我将其放在NonCPS函数中,但是因此丢失了Node对象。

这是管道脚本:

def buildPlanPath = 'C:\\buildPlan_test.xml'

@NonCPS

groovy.util.Node getBuildPlan(path) {

new XmlParser().parseText(readFile(path))

}

node {

//def buildPlan = new XmlParser().parseText(readFile(buildPlanPath))

groovy.util.Node buildPlan = getBuildPlan(buildPlanPath)

println buildPlan.getClass()

println buildPlan

println buildPlan.branch

}

这是一个输入样本:

<branch name='mybranch'>

<stage>

<job name='job11' />

<job name='job12' />

</stage>

<stage>

<job name='job21' />

<job name='job22' />

<job name='job23' />

</stage>

<stage>

<job name='job31' />

</stage>

</branch>

结果如下:

Started by user admin

[Pipeline] node

Running on master in C:\Jenkins\workspace\pipeline-develop

[Pipeline] {

[Pipeline] readFile

[Pipeline] echo

class java.lang.String

[Pipeline] echo

<branch name='mybranch'>

<stage>

<job name='job11' />

<job name='job12' />

</stage>

<stage>

<job name='job21' />

<job name='job22' />

<job name='job23' />

</stage>

<stage>

<job name='job31' />

</stage>

</branch>

[Pipeline] }

[Pipeline] // node

[Pipeline] End of Pipeline

groovy.lang.MissingPropertyException: No such property: branch for class: java.lang.String

at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)

at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:458)

at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.getProperty(DefaultInvoker.java:25)

at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:17)

at WorkflowScript.run(WorkflowScript:16)

at ___cps.transform___(Native Method)

at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.get(PropertyishBlock.java:62)

at com.cloudbees.groovy.cps.LValueBlock$GetAdapter.receive(LValueBlock.java:30)

at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.fixName(PropertyishBlock.java:54)

at sun.reflect.GeneratedMethodAccessor327.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)

at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)

at com.cloudbees.groovy.cps.Next.step(Next.java:58)

at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:154)

at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:164)

at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:276)

at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$000(CpsThreadGroup.java:78)

at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:185)

at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:183)

at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:47)

at java.util.concurrent.FutureTask.run(Unknown Source)

at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112)

at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)

at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)

at java.util.concurrent.FutureTask.run(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

Finished: FAILURE

我正在使用Jenkins 2.7和管道2.1,这是最新的。

回答:

您可以使用XmlSlurper,它对我有用。

def xmlText = new XmlSlurper().parse(MyURL)

xmlText.data.artifact.each {******

以上是 在Jenkins管道中解析XML文件 的全部内容, 来源链接: utcz.com/qa/400943.html

回到顶部