在 init.groovy.d 脚本中使用管道初始化 Jenkins 2.0

Initializing Jenkins 2.0 with pipeline in init.groovy.d script

为了自动化,我想用管道作业初始化 Jenkins 2.0 实例。我想创建一个 Groovy 脚本,在启动时将其复制到 /usr/share/jenkins/ref/init.groovy.d/ 文件夹。该脚本应创建一个 Jenkins 2.0 管道作业,用于处理来自 SCM 的 Jenkinsfile。

我找不到 2.0 管道的相关 Javadoc 类 或如何执行此操作的示例。

之前,使用 Job DSL 创建管道时,我使用 Groovy 脚本创建了一个带有 ExecuteDslScripts 构建器的 FreeStyleProject。该作业将成为作业 DSL 种子作业。

一种选择是使用初始化脚本创建作业 DSL 种子作业以创建 Jenkins 2.0 管道。它似乎不必要地复杂。

我正在这个 repo 中进行试验:https://github.com/martinmosegaard/vigilant-sniffle

如果您只需要创建一个简单的管道作业,您可以使用 Jenkins API。但这仅在创建一个简单的作业时才有效,对于复杂的设置,您需要一些抽象,例如作业 DSL。

从这里开始:http://javadoc.jenkins-ci.org/jenkins/model/Jenkins.html#createProject(java.lang.Class,%20java.lang.String).

示例:

import jenkins.model.Jenkins
import org.jenkinsci.plugins.workflow.job.WorkflowJob

WorkflowJob job = Jenkins.instance.createProject(WorkflowJob, 'my-pipeline')

然后您需要填充作业,例如设置流定义。

或者您可以等待 System Config DSL Plugin 准备就绪。但是还没有发布,不知道能不能带动就业。

借助 Job DSL 1.47(即将发布),您可以直接从初始化脚本中使用 Job DSL API,无需创建种子作业。

import javaposse.jobdsl.dsl.DslScriptLoader
import javaposse.jobdsl.plugin.JenkinsJobManagement

def jobDslScript = new File('jobs.groovy')
def workspace = new File('.')

def jobManagement = new JenkinsJobManagement(System.out, [:], workspace)

new DslScriptLoader(jobManagement).runScript(jobDslScript.text)

详情见PR #837