当前位置: 首页 > 面试题库 >

在Jenkins管道中解析XML文件

微生慈
2023-03-14
问题内容

我有一个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管道脚本中,因此可以创建我的一个类的对象。例如 : 如何在Jenkins Pipeline中导入文件?谢谢。 问题答案: 您可以这样: Classs.groovy 管道:

  • 我正试图在Jenkins管道中创建新文件,但出现了错误。错误:java。io。FileNotFoundException:/var/lib/jenkins/workspace/Pipeline-Groovy/test。txt(无此类文件或目录) 但当我在没有管道的情况下执行以下命令时,它会创建新文件 如果我在管道中使用相同的代码,则会出现上述错误

  • 问题内容: 您是否知道如何在内部执行AWS CLI命令以构建管道?我没有找到任何插件 问题答案: 首先,您需要在服务器上安装aws cli,并确保jenkins用户有权运行它。 或者在创建EC2实例时简单地使用Amazon AMI,它附带了aws cli。 使用适当的策略为角色分配实例。(在aws configure中使用用户密钥更简单) 在管道步骤中使用

  • 我有一个XML文件,如 我需要值,即“OEBPS/content.opf”文本。我尝试使用文档生成器和XML解析器,但没有结果。如何遍历该节点并获取值

  • 我有一个简单的Jenkinsfile,我想在其中从工作区加载一些数据。我正在使用管道插件来利用存储库中的Jenkinsfile。构建被外包给匹配的Jenkins代理。当我尝试使用“readFile”时,我收到以下消息: Java语言io。FileNotFoundException:/path/to/jenkins/workspace/XXXXX/project/data。json(无此类文件或目录

  • 我在Jenkins有一些windows slave,所以我需要在管道中将文件复制到他们。我听说了Copy To Slave和Copy Artifact插件,但它们没有管道语法手册。所以我不知道如何在管道中使用它们。 直接复制不起作用。 此代码返回错误: 有没有办法复制文件从主从Jenkins管道?