如何批量更新Jenkins jobs配置xml文件?

时间:2017-08-28 13:03:57

标签: git jenkins groovy xml-parsing

我是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作业配置是否正确?感谢任何帮助/建议。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以在add

中使用NodeList方法
    NodeList config = node.userRemoteConfigs."hudson.plugins.git.UserRemoteConfig"
    config.add(0, new Node(config[0], "TIMEOUT", "theValue"))