Jenkins pipeline 读取、修改xml文件

2644 篇文章 26 订阅
2361 篇文章 14 订阅

有时候我们会遇到这样的需求:在Jenkins pipeline中读取并修改xml文件内容。这个xml文件可能是保存了一些属性信息,也可能是保存的测试用例。

一般来说,利用XmlParser或者XmlSlurper方法就可以完成。但是有时候我们会遇到这两个方法被管理员禁用的情况:

图片

这时候我们就可以通过powershell脚本去完成。

1 当你的powershell脚本有调用外部变量时

这时候你的powershell脚本需要被包在withEnv方法中

withEnv(["param=$param", "param2=$param2"]){
  powershell'''
    ...code content...
  '''
}

2 读取xml文件并修改内容

先给一个xml文件叫demo.xml把它放在config文件夹里

<?xml version = '1.0'?>
<Node>
  <Conn id="1" name="conn1">
    <node2 id="1" name="mynode" />
    <node2 id="2" name="mynode2" />
  </Conn>
  <Conn id="2" name="conn2">
    ....
  </Conn>
<Node>

做这样的操作:

把name值为conn1的Conn下面的id是1的node2的name改为传进来的param值。

withEnv(["param=$param", "param2=$param2"]){
  powershell'''
    [xml]$xmlContent = Get-Content ./config/demo.xml
    foreach ($Conn in $xmlContent.Node.Conn) {
      if($Conn.name -eq "conn1"){
        $lines = get-content ./config/demo.xml
        $lines | foreach-object {$_ -replace $Conn.node2[0].name, "$env:param"} | set-content ./config/demo.xml
    }
}
  '''
}

因为pipeline中powershll脚本不支持//作为注释,所以代码中没有做注释。接下来我们做一下简单的解释:

[xml]类似于变量声明,声明$xmlCotent是一个xml类型

foreach就相当于Java中的for循环,变量和节点引用的方式$变量(节点)名

-eq 相当于equals,或者==

大小写不敏感

get-content就是获取文件内容

最后就是用param替换原来的name值。修改后文件会自动保存。但是不能连着写俩,如果连着改两行就需要把读取那个方法也重复写一遍,原因我也没弄明白呢。

如果你要改的值不是节点的属性,而是要修改的内容上面方法也同样适用,只需要$Conn.node就可以获取到"要修改内容"的值

单引号、不加引号这里要求很高!多加一个引号可能就会报错!

百度上对于pipeline的文章基本都是基础内容,真正有帮助的文章几乎搜不到,所以才开始介绍一些pipeline的内容,欢迎交流。


资源分享

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值