Groovy脚本将新的阶段作业添加到Jenkins的多作业中

时间:2017-11-08 08:17:22

标签: jenkins groovy jenkins-plugins jenkins-cli jenkins-groovy

对于jenkins中已有的多作业,需要使用Groovy Scripting添加新的阶段作业。我编写了以下groovy代码,它添加了一个已经存在的作业p25_deploy-1。
此代码用于创建多作业,但阶段作业未显示为在Jenkins UI中映射。就像我看到config.xml的情况一样,除了标记<killPhaseOnJobResultCondition>之外,它正如预期的那样正确创建。不确定相位作业未正确映射的原因?

import jenkins.model.*
import hudson.model.*
import com.tikal.jenkins.plugins.multijob.*
import com.tikal.jenkins.plugins.multijob.PhaseJobsConfig.*
import com.tikal.jenkins.plugins.multijob.PhaseJobsConfig.KillPhaseOnJobResultCondition.*
import java.lang.String.*
import hudson.model.Descriptor;
import hudson.tasks.Builder;

def jenkinsInstance = jenkins.model.Jenkins.instance

def templateJobName = 'profile_p25'

def templateJob = jenkinsInstance.getJob(templateJobName)


 // get MultiJob BuildPhases and clone each PhaseJob
 builders = templateJob.getBuilders();

builders.each { b ->
if (b instanceof MultiJobBuilder){
def pj = b.getPhaseJobs()

   hudson.model.Describable p1 = new PhaseJobsConfig("p25_deploy-1",null,
        true,PhaseJobsConfig.KillPhaseOnJobResultCondition NEVER,null,false,false,null,0,false,true,null,false,false)
   pj.add(p1)
   }  
 }

    templateJob.save()
   // update dependencies
    jenkinsInstance.rebuildDependencyGraph()

任何帮助都将非常感激。尝试了很多方法,但无法弄清楚脚本的问题。

我们可以使用DSL创建,但我希望它可以在Groovy Scripting中完成,而且还可以修改现有作业。

  

块引用

1 个答案:

答案 0 :(得分:0)

耶!我回答了我的问题的答案。很长一段时间以来都试过这个。最后我能够做到。我知道解决方案非常简单,但无法弄清楚它的黑客行为。

  

导入jenkins.model。*       import hudson.model。*       import com.tikal.jenkins.plugins.multijob。*       import com.tikal.jenkins.plugins.multijob.PhaseJobsConfig。*       import com.tikal.jenkins.plugins.multijob.PhaseJobsConfig.KillPhaseOnJobResultCondition。*   import java.lang.String。* import hudson.model.Descriptor;进口   hudson.tasks.Builder;

     

def jenkinsInstance = jenkins.model.Jenkins.instance

     

def templateJobName ='profile_p25'

     

def templateJob = jenkinsInstance.getJob(templateJobName)

     

//获取MultiJob BuildPhases并克隆每个PhaseJob构建器=   templateJob.getBuilders();

     

builders.each {b - &gt; if(b instanceof MultiJobBuilder){def pj =   b.getPhaseJobs()

     

hudson.model.Describable newphase = new   PhaseJobsConfig(展开时[I],NULL,             真实,空,空,假,假,空,0,假的,假的, “” 假的,假的)             newphase.killPhaseOnJobResultCondition ='从不'             pj.add(newphase)}}    templateJob.save()