有时候我们会遇到这样的需求:在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%免费】