使用Groovy Jenkins API更新Jenkins作业

使用Groovy Jenkins API更新Jenkins作业,api,groovy,jenkins,Api,Groovy,Jenkins,我正在考虑使用Groovy脚本控制台在Jenkins上创建和更新作业。使用此处记录的API 我发现了如何使用 createProjectFromXML(字符串名称,InputStream xml) 但如果作业已经存在,此方法将失败。如何使用新xml更新现有作业 更新 根据@ogondza的回答,我使用以下命令创建并更新了一个作业 import jenkins.* import jenkins.model.* import hudson.* import hudson.model.* impor

我正在考虑使用Groovy脚本控制台在Jenkins上创建和更新作业。使用此处记录的API

我发现了如何使用
createProjectFromXML(字符串名称,InputStream xml)

但如果作业已经存在,此方法将失败。如何使用新xml更新现有作业

更新

根据@ogondza的回答,我使用以下命令创建并更新了一个作业

import jenkins.*
import jenkins.model.*
import hudson.*
import hudson.model.*
import java.io.*
import java.nio.charset.StandardCharsets
import javax.xml.transform.stream.*

config = """......My config.xml......"""

InputStream stream = new ByteArrayInputStream(config.getBytes(StandardCharsets.UTF_8));

job = Jenkins.getInstance().getItemByFullName("job_name", AbstractItem)

if (job == null) {
  println "Constructing job"
  Jenkins.getInstance().createProjectFromXML("job_name", stream);
}
else {
  println "Updating job"
  job.updateByXml(new StreamSource(stream));
}

用于更新。还请注意,您可以使用REST API和Jenkins CLI通过XML创建/更新作业。

您希望在作业中更新什么?任何内容。构建步骤、安装的工具、工件、SSHPlublisher设置等。我已经有了xml中的这些设置,如果xml发生变化,我想更新作业。目前我正在通过python使用REST API更新作业。但是它太慢了。更新40个作业需要约6-7分钟。使用groovy,我相信我可以将时间缩短到~1分钟。您能建议我如何访问此方法吗?getProjects()返回从AbstractItem继承的项目对象。但它已经贬值了。相反,建议使用getAllItems()/getItem()返回TopLevelItem对象。该类不继承AbstractItem,但它有子类继承AbstractItem。但是强制强制转换似乎是组织API的一种不好的方式。使用
Jenkins#getAllItems(Class)
Jenkins#getItemByFullName(String fullName,Class)
将选择限制为您知道可以操作的类型。在这种情况下,它将是
AbstractItem