如何使用groovy创建和配置新的Jenkins作业?
groovy脚本()的例子很多,但是我没有发现创造新工作机会的例子。在线上有没有一个很好的例子来说明应该怎么做?Jenkins插件可以在作业中添加步骤来创建/修改现有作业 以下是插件网站的示例,它为git存储库中的每个分支创建了一个作业:如何使用groovy创建和配置新的Jenkins作业?,groovy,jenkins,Groovy,Jenkins,groovy脚本()的例子很多,但是我没有发现创造新工作机会的例子。在线上有没有一个很好的例子来说明应该怎么做?Jenkins插件可以在作业中添加步骤来创建/修改现有作业 以下是插件网站的示例,它为git存储库中的每个分支创建了一个作业: def project = 'quidryan/aws-sdk-test' def branchApi = new URL("https://api.github.com/repos/${project}/branches") def branches = n
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脚本将执行您想要的操作
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)
有关更多详细信息,请参阅从SCM创建管道脚本作业:
import hudson.plugins.git.*;
def scm = new GitSCM("git@github.com: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()
另一个例子:请参考和了解一些细节。使用XML的可能重复是我试图避免的事情。这只会使groovy代码更难阅读和维护。这会在顶层创建一个作业。如何将凭据添加到git签出?我在jenkins用户配置文件的.SSH目录中有SSH密钥和已知的_主机。您可以尝试使用第二个构造函数:new GitSCM([new UserRemoteConfig('ssh://example.com“,null,null,'jenkins ssh-credential')],[new-BranchSec('*/develop')],false,null,null,null,null)对我来说很好。从那以后,API似乎发生了变化,我不得不向构造函数添加第三个参数:`(new jenkins.branch.RateLimitBranchProperty.Throttle(60,“hours”,true))`
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()