2016-08-02 62 views
0

我正在使用詹金斯作业DSL(Groovy中)自动詹金斯作业的创建工作后不适的模板。现在,我试图自动创建一个使用ez-template插件的作业来使用已经存在的模板并将其应用到我新创建的作业中。不过,我写完了必要的配置后:使用通过詹金斯作业DSL詹金斯的EZ模板插件创建

job('foo') { 
    properties { 
    templateImplementationProperty { 
     exclusions(['ez-templates', 'job-params', 'disabled', 'description']) 
     syncAssignedLabel(true) 
     syncBuildTriggers(true) 
     syncDescription(false) 
     syncDisabled(false) 
     syncMatrixAxis(true) 
     syncOwnership(true) 
     syncScm(true) 
     syncSecurity(true) 
     templateJobName('template') 
    } 
    } 
} 

的工作得到正常的创建...除了模板永远不会应用,直到后,我打手动在新创建的作业的UI保存按钮。检查已创建作业的config.xml我可以看到xml包含我指定的配置,但从未应用过。

纵观EZ模板的代码,我可以看到,这是由于在该插件实现的silentSave功能 - 它没有触发任何事件保存配置写入到磁盘。

我试图提供给詹金斯API方法,但我没有成功那里。关于如何应用我的配置的任何想法?

回答

1

全面披露:我是同事,和能够帮助shredmasteryjm解决这个问题。我认为最好把它放在网络上供其他人使用。

触发模板实现内容需要更新的Groovy代码是:

import hudson.model.*; 
import jenkins.model.*; 
import com.joelj.jenkins.eztemplates.utils.TemplateUtils; 
import com.joelj.jenkins.eztemplates.TemplateImplementationProperty; 

Jenkins j = Jenkins.getInstance() 
Item job = j.getItemByFullName('foo') 
TemplateImplementationProperty template = TemplateUtils.getTemplateImplementationProperty(job) 

TemplateUtils.handleTemplateImplementationSaved(job, template) 

这是利用了EZ-模板TemplateUtils类触发实际保存时,使用该作业使用的模板。值得注意的是,如果job'foo'没有实现模板,那么'template'变量将为null,导致此代码出错。 YMMV

在我们的案例中,我们还需要从另一个问题中添加一些有用的信息:Access to build environment variables from a groovy script in a Jenkins build step (Windows) 以便利用参数化的作业名称。因此我们完成剧本是这样的:

import hudson.model.*; 
import jenkins.model.*; 
import com.joelj.jenkins.eztemplates.utils.TemplateUtils; 
import com.joelj.jenkins.eztemplates.TemplateImplementationProperty; 

// get current thread/Executor 
def thr = Thread.currentThread() 

// get current build 
def build = thr?.executable 
def hardcoded_param = "parameter_job_name" 
def resolver = build.buildVariableResolver 
def hardcoded_param_value = resolver.resolve(hardcoded_param) 

Jenkins j = Jenkins.getInstance() 
Item job = j.getItemByFullName(hardcoded_param_value) 
TemplateImplementationProperty template = TemplateUtils.getTemplateImplementationProperty(job) 

TemplateUtils.handleTemplateImplementationSaved(job, template) 
0

FYI EZ模板1.3.0现在激发了额外的节省事件,这样你就不需要上述伎俩。