xml - 查找 --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 吗?
解决方案
知道如何获取 --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") }}'
推荐阅读
- android - Fuel httpGet() responseString,失败:com.github.kittinunf.fuel.core.BubbleFuelError: null
- sql - PostgreSQL 中的 TRIGGER ON VIEW 不会触发
- bash - 如何在每次 sed 匹配后添加“,”?
- json - 在 Elasticsearch 中插入 GeoPoint 不起作用
- angular - 我如何获得 TemplateRef
不创建虚拟组件? - python - 检查类名(字符串)是否用于 Python 中的某些类
- c# - 当登录详细信息正确时,如何使按钮将您带到另一个表单?-C#
- regex - 正则表达式:在所选文本前面包含 3 个单词,在所选文本后面包含 3 个单词
- rest - shopify 422 无法处理的实体异常 utf-8 字符
- php - PHP 中 TRUE 和 FALSE 常量定义之间的不一致