1

对于 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 中完成,此外还要修改现有的工作。

块引用

4

1 回答 1

1

耶!我回来回答我的问题。已经尝试了很长时间。终于可以做到了。我知道解决方案非常简单,但无法弄清楚它的破解方法。

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 newphase = new
        PhaseJobsConfig(deploys[i],null,
            true,null,null,false,false,null,0,false,false,"",false,false)
            newphase.killPhaseOnJobResultCondition = 'NEVER'
            pj.add(newphase)    
    }
}
templateJob.save()
于 2017-11-14T12:00:22.717 回答