如何使用groovy创建和配置新的Jenkins Job?

How create and configure a new Jenkins Job using groovy?

groovy脚本有很多示例(http://scriptlerweb.appspot.com/catalog/list),但是我没有找到创建新工作的示例。 在线上有一个很好的例子说明应该如何做?


从SCM作业创建管道脚本:

1
2
3
4
5
6
7
8
9
10
11
12
import hudson.plugins.git.*;

def scm = new GitSCM("[email protected]:dermeister0/Tests.git")
scm.branches = [new BranchSpec("*/develop")];

def flowDefinition = new org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition(scm,"Jenkinsfile")

def parent = Jenkins.instance
def job = new org.jenkinsci.plugins.workflow.job.WorkflowJob(parent,"New Job")
job.definition = flowDefinition

parent.reload()

另一个示例:https://github.com/linagora/james-jenkins/blob/master/create-dsl-job.groovy


Jenkins插件Job DSL Plugin可以在作业中添加步骤,以创建/修改现有作业。

这是插件网站上的示例,该示例为git存储库中的每个分支创建一个作业:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def project = 'quidryan/aws-sdk-test'
def branchApi = new URL("https://api.github.com/repos/${project}/branches")
def branches = new groovy.json.JsonSlurper().parse(branchApi.newReader())
branches.each {
    def branchName = it.name
    def jobName ="${project}-${branchName}".replaceAll('/','-')
    job(jobName) {
        scm {
            git("git://github.com/${project}.git", branchName)
        }
        steps {
            maven("test -Dproject.name=${project}/${branchName}")
        }
    }
}

假设您有一个包含新工作的config.xml的XML字符串,那么以下groovy脚本将完成您想要的工作。

1
2
3
4
5
6
7
8
import jenkins.model.*

def jobName ="my-new-job"
def configXml ="" // your xml goes here

def xmlStream = new ByteArrayInputStream( configXml.getBytes() )

Jenkins.instance.createProjectFromXML(jobName, xmlStream)

有关更多详细信息,请参阅API文档


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def jobDSL="""
node {
  stage("test"){
   echo 'Hello World'
  }
}

"""
;
//http://javadoc.jenkins.io/plugin/workflow-cps/index.html?org/jenkinsci/plugins/workflow/cps/CpsFlowDefinition.html
def flowDefinition = new org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition(jobDSL, true);
//http://javadoc.jenkins.io/jenkins/model/Jenkins.html
def parent = Jenkins.instance;
//parent=Jenkins.instance.getItemByFullName("parentFolder/subFolder")
//http://javadoc.jenkins.io/plugin/workflow-job/org/jenkinsci/plugins/workflow/job/WorkflowJob.html
def job = new org.jenkinsci.plugins.workflow.job.WorkflowJob(parent,"testJob")
job.definition = flowDefinition

job.setConcurrentBuild(false);

//http://javadoc.jenkins.io/plugin/branch-api/jenkins/branch/RateLimitBranchProperty.html
job.addProperty( new jenkins.branch.RateLimitBranchProperty.JobPropertyImpl
    (new jenkins.branch.RateLimitBranchProperty.Throttle (60,"hours")));
def spec ="H 0 1 * *";
hudson.triggers.TimerTrigger newCron = new hudson.triggers.TimerTrigger(spec);
newCron.start(job, true);
job.addTrigger(newCron);
job.save();


Jenkins.instance.reload()