Jenkins XmlParser 报告找不到根节点属性的此类字段

2024-01-11

我有一个具有以下 XML 文件的项目(Cordova 项目的 config.xml)...

    <?xml version='1.0' encoding='utf-8'?>
    <widget android-versionCode="16" id="com.mycomp.myapp" ios-CFBundleVersion="15" version="1.3.0.b4" windows-packageVersion="1.2.6.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
        <name>My App</name>
        <description>My app description</description>
        <author>mycom.com.au</author>
           ....

我想做的就是读取的值version属性(给我字符串1.3.0.b4) 的根元素 (widget)。遵循示例here http://docs.groovy-lang.org/latest/html/api/groovy/util/XmlParser.html它说使用的地方.@来获取一个属性。

我的 Jenkins 文件脚本中有以下内容:

        script {
              def xml = readFile "${env.WORKSPACE}/config.xml"
              def rootNode = new XmlParser().parseText(xml)
              def version = rootNode.@version
              echo 'version is...'
              echo version

但是当我运行它时,我收到以下错误:

        org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: No such field found: field groovy.util.Node version
        at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.unclassifiedField(SandboxInterceptor.java:425)
        at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetAttribute(SandboxInterceptor.java:436)
        at org.kohsuke.groovy.sandbox.impl.Checker$8.call(Checker.java:370)
        at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetAttribute(Checker.java:375)
        at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getAttribute(SandboxInvoker.java:37)

我努力了rootNode.@version(如上)rootNode[0].@version and rootNode[3].@version但没有任何作用。

以上有什么问题吗?

Edit 1

如果我使用以下内容:

def xml = readFile "${env.WORKSPACE}/config.xml"
def rootNode = new XmlParser().parseText(xml)
def version = rootNode.text()
echo 'version is...'
echo version

它打印出来My app description这有点奇怪(它跳到描述节点)

Edit 2

我尝试使用以下内容:

 def rootNode = new XmlSlurper().parse("${env.WORKSPACE}/config.xml")
 def version = rootNode.@'version'

但我仍然遇到类似的错误:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: No such field found: field groovy.util.slurpersupport.NodeChild version
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.unclassifiedField(SandboxInterceptor.java:425)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetAttribute(SandboxInterceptor.java:436)
at org.kohsuke.groovy.sandbox.impl.Checker$8.call(Checker.java:370)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetAttribute(Checker.java:375)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getAttribute(SandboxInvoker.java:37)
at com.cloudbees.groovy.cps.impl.AttributeAccessBlock.rawGet(AttributeAccessBlock.java:20)
at WorkflowScript.run(WorkflowScript:15)
at ___cps.transform___(Native Method)

如果我打电话echo rootNode.text(),再次似乎只是打印出 main 中前 3 个标签的内容,widget标签,即My AppMy app descriptionmycom.com.au.


Edit:

我在能够修改属性的上下文中进行了更多测试,并在使用时发现[]访问, 的@属性选择器确实有效。看来这会导致在幕后使用不同的方法,您可以在詹金斯中批准这些方法(getAtand putAt) .

我们可以简单地使用

def rootNode = new XmlParser().parseText(xml)
println rootNode['@version']

原答案:

关于直接访问属性似乎存在一些错误@选择器上的groovy.util.Node http://docs.groovy-lang.org/latest/html/api/groovy/util/Node.html带有脚本沙箱的对象。

解决方法是使用.attributes()方法来获取完整的属性映射,并通过键访问值,如下所示:

def rootNode = new XmlParser().parseText(xml)
println rootNode.attributes()['version']

这将导致第一次运行失败并提示您批准使用method groovy.util.Node attributes,但一旦获得批准就可以工作。

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

Jenkins XmlParser 报告找不到根节点属性的此类字段 的相关文章

  • 如何使用远程访问 API 获取 jenkins 的系统配置

    詹金斯提供了很好的远程访问API https wiki jenkins ci org display JENKINS Remote access API 可用于获取大量信息 例如作业和视图 我想知道是否或如何从远程访问 API 获取系统 全
  • 降低 Sonar 2.1.x 中的日志级别

    我有一个 Maven 3 x 版本 它使用 Sonar 2 1 x 进行质量控制 maven sonar 插件在 Jenkins 内部使用来运行声纳检查 在 Jenkins 构建过程中 当 Sonar 启动时 它会在 INFO 级别记录很多
  • Puppet 3 文件递归速度非常慢

    我在 Amazon Linux 2012 09 上使用 Puppet 3 我的清单之一设置并重新配置了一些目录 其中一项任务只是将文件夹所有者和组递归更改为另一个用户 然而 这需要 60 秒以上才能完成 并且目录中几乎没有任何内容 终端中的
  • 在 Jenkins 管道脚本中找不到文件

    我正在尝试让当前在 Jenkins master 上运行的管道脚本在远程 Jenkins 节点上执行 但我有一个奇怪的现象FileNotFound例外 我能够重现该问题的最基本版本的管道是这样的 node remoteNode env SE
  • 使用 Cordova 加载应用程序时如何配置状态栏颜色?

    我用 Cordova 创建了一个应用程序 我想改进 UI UX 使其看起来尽可能像本机应用程序 当应用程序第一次加载时 状态栏 和背景 的前几毫秒 实际上不到 1 秒 没有我配置的颜色Cordova 状态栏插件 https cordova
  • 在 Cordova 中单击 html 按钮时启动新活动

    我正在尝试使用 Cordova 和 Java 构建 Android 应用程序 我想构建当在 HTML 代码中单击按钮时启动新 Intent 的意图 这是我的 HTML 代码 h2 Hello Android h2
  • Android 上的自定义视图和窗口属性

    我想要做的是在我的应用程序顶部添加一个视图 该视图类似于过滤器视图 我想操纵屏幕的颜色 并且我还希望能够同时更改屏幕的亮度时间 这两件事似乎是分开起作用的 但不能一起起作用 这是我的代码 添加视图 colourView new Layer
  • 如何通过 JSON / JS 在 Jenkins 中添加 CSRF 面包屑

    我想在 Jenkins 中通过 API 创建作业 但无法连接 Jenkins 中的 CSRF 保护课程 我得到了一个面包屑 但不知道如何将其附加到 JSON 或 JavaScript 中的 url 请求 以通过 POST 方法获取数据传递
  • Jenkins 管道阶段 - 传递整个文件

    运行包含多个节点的阶段的 Jenkins 管道 基于 Groovy 我需要将 stageA 上的 NodeA 上的某个文件的列表传递到 StageB 上的 NodeB 在 stageA NodeA 我运行 DEVenv readFile s
  • Jenkins:有什么方法可以清理 Jenkins 工作区吗?

    如何清理 Jenkins 中的工作区 我在用AccuRev作为版本控制工具 我创建freestyle詹金斯的项目 有一种方法可以清理 Jenkins 中的工作区 您可以在构建之前或构建之后清理工作区 首先 安装工作区清理插件 https w
  • 如何在 Jenkinsfile 中将 Artifactory DiscardOldBuilds 设置为 true?

    我正在努力使用 Jenkins 多分支管道来实现构建作业 最后阶段是将构建输出上传到 Artifactory 通过界面配置独立作业时 有一个选项 丢弃来自 Artifactory 的旧构建 这允许我仅保留 要保留的最大构建数 设置中指定的相
  • 如何在 Subversion 的多模块 Maven 构建中触发单个模块的 Jenkins 构建?

    我在 Jenkins 中设置了一个大型 Maven 多模块构建 它是为增量构建而设置的 当触发时 它会解析所有 POM 并找出需要构建的内容 它当前设置为在 SCM 更改时触发 我想进行此构建 以便我可以执行以下操作 还是手动启动吧 当我这
  • 在全球范围内压制 StyleCop 警告

    如何在解决方案中全局抑制 StyleCop 警告 该解决方案是使用 Jenkins 持续构建和集成工具 持续构建的 并且应用了所有 StyleCop 规则 该解决方案使用 TAB 字符而不是 4 个空格 因为这是我的开发团队采用的标准 因此
  • 如何在多分支管道中为特定分支设置下一个版本号

    我正在尝试以编程方式为我们的发布分支设置下一个版本号 但我遇到了一个问题 以下是我尝试过的两种方法 def job Jenkins instance getItem master job nextBuildNumber env BUILD
  • 如何在 iOS 中使用 Cordova 文件传输插件下载文件

    我使用以下代码来下载文件 scope onDownloadMusic function live var downloadUrl offlineUrl fileName var hostUrl encodeURI live url var
  • Jenkins + Gerrit 触发器未自动构建

    Jenkins 似乎不会自动引入需要 Gerrit 审核的更改 我们正在使用 Gerrit 触发器 另外 如果我尝试手动触发一些 似乎什么也没有发生 Gerrit Trigger管理区域中的 控制 似乎没有多大 闪烁 启动 停止 或 重新启
  • 如何保存 1 个 xcode 项目中的所有构建设置并在其他 xcode 项目上使用它们?

    我使用 xcode 4 5 和 cordova phonegap 来构建我的应用程序 我投入了大量时间来获取适合我的 Xcode 项目的构建设置 并且我想在我正在构建的多个应用程序上重用这些设置 我正在寻找是否有一种快速的方法来导出这些设置
  • cordova-plugin-whitelist 适用于 Android,但不适用于 iOS (Phonegap Build)

    我正在开发一个用 Cordova 封装并使用 Phonegap Build 构建的 JavaScript 应用程序 我们包括cordova plugin whitelist来自我们构建中的 npm 并添加了
  • 詹金斯钩子不工作 - 詹金斯位桶

    您好 我正在使用 jenkins 和 bitbucket 当我向 bitbucket 存储库提交任何内容时 我想触发 jenkins 中的构建 在詹金斯 我创建了一个名为test 1 在配置部分Build Triggers我勾选的部分Tri
  • Jenkins 管道构建如何确定工作区文件夹?

    在 Jenkins 管道中 当在特定节点上运行构建时 会在该代理上分配工作空间 我们没有设置工作空间路径 因此它是自动确定的 据我了解 当同一作业在同一代理上同时运行时 工作区必须包含执行程序编号以隔离构建 但是 工作空间路径到底是如何构建

随机推荐