我们有一个jenkins服务器有太多的工作,大多数工作都有Build触发器作为Poll SCM。我想删除所有作业的触发器。寻找一种简单的方法来做到这一点。我看到无论何时设置构建触发器属性,config.xml都有 -
<triggers>
<hudson.triggers.SCMTrigger>
<spec>
# poll infrequently and rely on Stash webhooks to trigger builds
@daily
</spec>
<ignorePostCommitHooks>false</ignorePostCommitHooks>
</hudson.triggers.SCMTrigger>
</triggers>
每当Poll SCM标志设置为false时,config.xml中的相同元素如下 -
<triggers/>
我正在寻找一种简单的方法,使用sed替换上面的触发器标签,但是无法使用sed获取它。
我在jobs文件夹中尝试了这个,但它不起作用 -
sudo find . -name "config.xml" -print0 | sudo xargs -0 sed -i '' -e 's|<triggers>.*<\/triggers|<triggers\/>|g'
所以基本上我想替换上面的triggers元素的全部内容以及只有这个的开始和结束触发器标记
<triggers/>
答案 0 :(得分:3)
sed
是一个流编辑器,逐行读取文件。您的模式跨越文件中的多行,这就是它永远不匹配的原因。
在尝试替换之前,你应该让sed
将整个文件读入模式空间......
sed ':a;N;$!ba; s|<triggers>.*<\/triggers>|<triggers\/>|g' example.xml
...或使用其他工具(最好适合XML文件,如xmlstarlet
):
xmlstarlet ed -O -u /triggers -v '' example.xml