在 Jenkins 管道中解析 XML 文件

2023-11-23

Note:

当我的 Jenkins 环境中只有一个主节点时,我发布了这个问题。这使得序列化成为一个较小的问题,因为没有其他节点可以通信,因此这里的代码不会在多节点环境上按预期运行(例如,readFile只会从主节点读取文件)。

根据我的经验,最好以其他格式(JSON、YAML、Groovy,Jenkins 原生支持)编写配置,或使用外部工具(例如xmllint在 Linux 上)如果您无法控制文件的格式。

原问题:

我有一个 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 和 pipeline 2.1,这是目前最新的。


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

def xmlText = new XmlSlurper().parse(MyURL)
xmlText.data.artifact.each {******
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Jenkins 管道中解析 XML 文件 的相关文章

随机推荐

  • 在android中缩放和平移位图

    我正在尝试出售位图并在每一步进行翻译 如果我们看下面的代码 我正在绘制一个图像 对其进行平移和缩放 然后反向执行相同的操作 以便恢复原始配置 但在应用操作后 我确实得到了原始缩放图像 比例因子 1 但图像被平移到不同的位置 您能指出正确的方
  • 根据文本调整 UILabel 高度

    考虑我有以下文本UILabel 一长行动态文本 由于外星军队的数量远远超过团队 玩家必须利用后世界末日的世界来发挥自己的优势 例如在垃圾箱 柱子 汽车 瓦砾和其他物体后面寻找掩护 我想调整大小UILabel s高度 以便文本可以适合 我正在
  • 在 iOS 7 中使用相机时,应用程序因内存压力而终止

    我面临错误应用程序因内存压力而终止当我使用 UIImagePickerController Camera 捕获一些图像时 我首先收到内存警告 然后应用程序突然崩溃 这个问题在 iOS 7 中特别明显 在 iOS 6 中它工作得很好 有人知道
  • Jenkins 管道条件环境变量

    我有一组静态环境变量environmental声明性管道的指令部分 这些值可用于管道中的每个阶段 我希望这些值根据任意条件而改变 有没有办法做到这一点 pipeline agent any environment if params con
  • jQuery:如何在页面加载时滚动到某个锚点/div?

    最近我尝试更频繁地使用 jquery 现在我遇到一些问题 我想用 jquery 解决 希望你能帮助我 我有一些包含一些锚标记的网页 假设锚位于页面中间 并且在事件加载时我希望页面在某个锚标记位置启动 这意味着页面将自动 滚动 到某个位置 这
  • 如何处理 System.Data.DataTableExtensions.CopyToDataTable() 中的缺陷

    我遇到了一些可能是扩展方法中的缺陷的事情 CopyToDataTable 此方法用于导入 在 VB NET 中 System Data DataTableExtensions然后针对 IEnumerable 调用该方法 如果您想使用 LIN
  • 无法加载 /usr/local/lib 中存在的共享库 (Fedora x64)

    当尝试运行我刚刚成功编译的程序时 出现以下错误 src sensors laser scan Producer 加载共享库时出错 liblcm so 1 无法打开共享对象文件 没有这样的文件或目录 ls usr local lib libl
  • Javascript - 标准化带重音的希腊字符

    我正在尝试对希腊文本应用某种标准化 使用小写字母 删除重音符号并将 替换为 例如 我希望 希腊语多调 和 现代希腊语 变成 我跑过unicode table com并写下我应该替换哪些角色 Greek and Coptic Range 03
  • 无法将 spring-modules-validation 与 spring 3 一起使用

    我有以下 pom 文件
  • Git 扩展和 Meld 合并

    使用时是否可以使用Meld作为合并工具Git 扩展在 Windows 上 在 Git 扩展中 设置 gt Git 配置 Merge tool meld Path to mergetool C Program Files x86 Meld M
  • 还有比 pandas fillna() 更快的方法吗?

    Pandas fillna 速度非常慢 尤其是在数据框中存在大量丢失数据的情况下 还有比它更快的方法吗 我知道如果我简单地删除一些包含 NA 的行和 或列会有帮助 我尝试测试 np random seed 123 N 60000 df pd
  • 如何将投影应用于 Spring Data REST 查询方法资源?

    我正在使用 Spring Data REST 2 1 4 RELEASE 我创建 一个实体Booking 它的 REST 存储库 扩展CrudRepository named BookingRepository and a 投影 Booki
  • R 中的 For 循环是邪恶的吗?

    我听说你不打算将过程编程风格强加到 R 上 我发现这很难 我刚刚用 for 循环解决了一个问题 这是错误的吗 有没有更好 更 R 风格 的解决方案 问题 我有两列 Col1 和 Col2 Col1 包含以自由格式输入的职位名称 我想使用 C
  • UIImagePNGRepresentation(UIImage()) 返回 nil

    为什么UIImagePNGRepresentation UIImage 回报nil 我正在尝试创建一个UIImage 在我的测试代码中只是为了断言它已正确传递 我的两个 UIImage 的比较方法使用UIImagePNGRepresenta
  • ASP.NET 页面中应该在哪里完成操作?

    我对 ASP NET 非常陌生 经过一番摸索之后有几个问题 我想知道我是否做错了 我有这样做的坏习惯 我有兴趣了解 ASP NET 的运作方式 我的问题是 在哪里可以找到文档来指导我决定在哪里进行哪些处理 作为一些具体示例 我对这些问题的答
  • 将信号处理委托给 python 中的子进程

    如何从 python 脚本运行命令并委托给它信号 例如Ctrl C 我的意思是当我跑步时 例如 from subprocess import call call child proc I want child proc处理Ctrl C 我猜
  • [Vue warn]:无法挂载组件:Webpack 4 中未定义模板或渲染函数

    当我升级到 Webpack 并将相关依赖项升级到 v4 后 我开始收到此错误 Vue warn Failed to mount component template or render function not defined 这是我的相关
  • 如何获取函数调用的返回值指针?

    我只需要一个指向 time Time 的指针 因此下面的代码似乎无效 c go 5 无法获取 time Now 的地址 我只是想知道为什么 除了先对变量进行赋值并获取变量的指针之外 还有什么方法可以做到这一点吗 package main i
  • 为什么 ZUUL 强制 SEMAPHORE 隔离来执行其 Hystrix 命令?

    我注意到 Spring Cloud ZUUL 强制执行隔离为 SEMAPHORE 而不是默认的 THREAD 如 Netflix 推荐的那样 评论中org springframework cloud netflix zuul filters
  • 在 Jenkins 管道中解析 XML 文件

    Note 当我的 Jenkins 环境中只有一个主节点时 我发布了这个问题 这使得序列化成为一个较小的问题 因为没有其他节点可以通信 因此这里的代码不会在多节点环境上按预期运行 例如 readFile只会从主节点读取文件 根据我的经验 最好