2013-06-06 24 views
8

Có rất nhiều ví dụ về kịch bản lệnh hấp dẫn (http://scriptlerweb.appspot.com/catalog/list) không có ví dụ về tạo công việc mới.Cách tạo và cấu hình Công việc Jenkins mới bằng cách sử dụng groovy?

+0

Tham khảo [này] (http: //stackoverflow.com/a/8803743/2051952) và [this] (htt p: //stackoverflow.com/questions/10413936/creating-a-jenkins-environment-variable-using-groovy) để biết một số thông tin chi tiết. – dmahapatro

+0

có thể trùng lặp của [Cấu hình hoặc Tạo công việc hudson tự động] (http://stackoverflow.com/questions/3886892/configure-or-create-hudson-job-automatically) –

Trả lời

3

Plugin Jenkins Job DSL Plugin có thể thêm các bước vào công việc để tạo/sửa đổi công việc hiện có.

Dưới đây là ví dụ từ trang web của plugin, tạo ra một công việc cho từng chi nhánh tại một kho git:

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}") 
     } 
    } 
} 
2

Cho rằng bạn có một chuỗi XML chứa config.xml cho công việc mới, kịch bản lệnh sau sẽ làm những gì bạn muốn.

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) 

Để biết thêm chi tiết, xem API Docs

+2

Sử dụng XML là điều tôi đang cố tránh. Nó chỉ làm cho mã groovy khó đọc và duy trì hơn. –

5

Tạo Pipeline kịch bản từ SCM công việc:

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() 

Một ví dụ khác: https://github.com/linagora/james-jenkins/blob/master/create-dsl-job.groovy

0
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() 
Các vấn đề liên quan