【问题标题】:Updating a Jenkins job with the Groovy Jenkins API使用 Groovy Jenkins API 更新 Jenkins 作业
【发布时间】:2015-07-07 15:00:12
【问题描述】:

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

http://javadoc.jenkins-ci.org/

我发现了如何使用 createProjectFromXML(String name, 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));
}

【问题讨论】:

  • 你想在工作中更新什么?
  • 任何东西。构建步骤、安装的工具、工件、SSHPlublisher 设置等。我已经在 xml 中有这些设置,如果 xml 发生更改,我想更新作业。

标签: api groovy jenkins


【解决方案1】:

使用AbstractItem#updateByXml 进行更新。另请注意,您可以使用 REST API 和 Jenkins CLI 通过 XML 创建/更新作业。

【讨论】:

  • 目前我正在通过 python 使用 REST API 来更新作业。但它太慢了。更新 40 个作业大约需要 6 - 7 分钟。有了 groovy,我相信我可以将其减少到大约 1 分钟。
  • 您能建议我如何访问此方法吗? Jenkins.instance.getProjects() 返回继承自 AbstractItem 的 Project 对象。但是已经贬值了。相反,建议使用返回 TopLevelItem 对象的 getAllItems()/getItem()。这个类不继承自 AbstractItem 但它有子类。但强制转换似乎是组织 API 的一种糟糕方式。
  • 使用Jenkins#getAllItems(Class<T>)Jenkins#getItemByFullName(String fullName, Class<T>) 将选择范围限制为您知道可以操作的类型。在这种情况下是AbstractItem
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
相关资源
最近更新 更多