如何在插件中创建新的 Jenkins 作业?
我有一个 Jenkins 插件,它监听消息队列,当消息到达时,触发一个新事件以创建一个新作业(或开始运行)。
我正在寻找类似的东西:
Job myJob = new Job(...);
我知道我可以使用 REST API 或 CLI,但因为我在插件中,所以我会使用 java 内部解决方案。
如何在插件中创建新的 Jenkins 作业?
我有一个 Jenkins 插件,它监听消息队列,当消息到达时,触发一个新事件以创建一个新作业(或开始运行)。
我正在寻找类似的东西:
Job myJob = new Job(...);
我知道我可以使用 REST API 或 CLI,但因为我在插件中,所以我会使用 java 内部解决方案。
使用Job DSL 插件。
从插件页面:
Jenkins 是一个出色的构建管理系统,人们喜欢使用它的 UI 来配置作业。不幸的是,随着工作数量的增加,维护它们变得乏味,并且使用 UI 的范式分崩离析。此外,这种情况下的常见模式是复制作业以创建新作业,这些“孩子”习惯于偏离原来的“模板”,因此很难保持这些作业之间的一致性。
Jenkins job-dsl-plugin 试图通过与生成的作业同步的模板以编程形式以绝对最小值定义作业来解决此问题。目标是让您的项目能够定义他们想要与其项目相关的所有工作,声明他们对工作的意图,将常见的东西留给之前定义或隐藏在 DSL 后面的模板。
您只需执行以下操作即可创建新的 hudson/jenkins 工作:
FreeStyleProject proj = Hudson.getInstance().createProject(FreeStyleProject.class, NAMEOFJOB);
如果您希望能够处理更新(并且您已经拥有config.xml
):
import hudson.model.AbstractItem
import javax.xml.transform.stream.StreamSource
import jenkins.model.Jenkins
final jenkins = Jenkins.getInstance()
final itemName = 'name-of-job-to-be-created-or-updated'
final configXml = new FileInputStream('/path/to/config.xml')
final item = jenkins.getItemByFullName(itemName, AbstractItem.class)
if (item != null) {
item.updateByXml(new StreamSource(configXml))
} else {
jenkins.createProjectFromXML(itemName, configXml)
}
在执行此操作之前,请确保您拥有核心 .jar 文件。