首页 > 解决方案 > 查找 --httpPort 的 XPath

问题描述

我试图更改我的 Jenkins xml 文件中的端口。在识别正确的 xpath 时遇到问题。

<service>
  <id>Jenkins</id>
  <name>Jenkins</name>
  <description>This service runs Jenkins automation server.</description>
  <env name="JENKINS_HOME" value="%BASE%"/>

  <executable>%BASE%\jre\bin\java</executable>
  <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>
  <logmode>rotate</logmode>
  <onfailure action="restart" />
  <extensions>
    <extension enabled="true" 
               className="winsw.Plugins.RunawayProcessKiller.RunawayProcessKillerExtension"
               id="killOnStartup">
      <pidfile>%BASE%\jenkins.pid</pidfile>
      <stopTimeout>10000</stopTimeout>
      <stopParentFirst>false</stopParentFirst>
    </extension>
  </extensions>
</service>

这是我的 Ansible 剧本。我很确定我还没有找到正确的 xpath。

- hosts: win
  gather_facts: no
  tasks:
  - name: Set port to 8888
    xml:             
      path: C:\Program Files (x86)\Jenkins\jenkins.xml
      xpath: /service/arguments/httpPort
      value: 8888

知道如何获取 --httpPort 的 xpath 吗?

标签: xmlansible

解决方案


知道如何获取 --httpPort 的 xpath 吗?

您对 xpath 的作用有一个不正确的心智模型。“X”代表 XML,它停在<argument>; XML 不解析其标签内的字符数据

也就是说,您想要的是获取的值<argument>,对其进行变异,然后使用您开始尝试执行的操作将其写回:

- hosts: all
  tasks:
  - xml:
      path: jenkins.xml
      xpath: /service/argument
      content: text
    register: arg
  - xml:
      path: jenkins.xml
      xpath: /service/argument
      value: '{{ arg.matches[0].argument | regex_replace("--httpPort=8080", "--httpPort=1234") }}'

推荐阅读