我是Jenkins和Groovy的新手。我需要批量更新Jenkins作业配置文件。例如,更改大量作业的Git URL或添加超时行为。为此,我使用这段Groovy代码生成Jenkins作业名称列表:
import com.cloudbees.hudson.plugins.folder.*
void processFolder(Item folder) {
folder.getItems().each {
if(it instanceof Folder) {
processFolder(it)
} else {
processJob(it)
}
}
}
void processJob(Item job) {
println job.fullName
}
Jenkins.instance.getItems().each {
if(it instanceof Folder) {
processFolder(it)
} else {
processJob(it)
}
}
在processJob()方法中,我计划使用作业名称获取作业的配置文件
void processJob(Item job) {
AbstractItem item = (AbstractItem)Jenkins.getInstance().getItem(job.name);
XmlFile configXml = item.getConfigFile();
File xmlfile = configXml.getFile();
def xml = new XmlParser().parse(xmlfile)
}
示例配置文件:
<?xml version='1.0' encoding='UTF-8'?>
<project>
<actions/>
<description></description>
<keepDependencies>false</keepDependencies>
<properties/>
<scm class="hudson.plugins.git.GitSCM" plugin="git@3.4.1">
<configVersion>2</configVersion>
<userRemoteConfigs>
<hudson.plugins.git.UserRemoteConfig>
<url>https://github.com/gitboy/Backup.git</url>
</hudson.plugins.git.UserRemoteConfig>
</userRemoteConfigs>
<branches>
<hudson.plugins.git.BranchSpec>
<name>*/master</name>
</hudson.plugins.git.BranchSpec>
</branches>
</project>
这里我需要在URL标记之后添加一个新元素TIMEOUT。
但是XmlParser提供的输出看起来像这样:
project[attributes={}; value=[actions[attributes={}; value=[]],
description[attributes={}; value=[]], keepDependencies[attributes={}; value=
[false]], properties[attributes={}; value=[]], scm[attributes=
{class=hudson.plugins.git.GitSCM, plugin=git@3.4.1}; value=
[configVersion[attributes={}; value=[2]], userRemoteConfigs[attributes={};
value=[hudson.plugins.git.UserRemoteConfig[attributes={}; value=
[url[attributes={}; value=
[https://github.com/gitboy/Backup.git]]]]]],
branches[attributes={}; value=[hudson.plugins.git.BranchSpec[attributes={};
value=[name[attributes={}; value=[*/master]]]]]]]
我找不到任何关于如何使用XmlParser / XmlSlurper添加新子元素的示例。
批量更新Jenkins作业配置是否正确?感谢任何帮助/建议。
提前致谢!
答案 0 :(得分:0)
您可以在add
NodeList
方法
NodeList config = node.userRemoteConfigs."hudson.plugins.git.UserRemoteConfig"
config.add(0, new Node(config[0], "TIMEOUT", "theValue"))