使用Groovy Jenkins API更新Jenkins作业
我正在考虑使用Groovy脚本控制台在Jenkins上创建和更新作业。使用此处记录的API 我发现了如何使用使用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
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
。