我正在使用Jenkins Job DSL(Groovy)自动创建Jenkins作业。现在,我正在尝试自动创建一个使用ez-template插件的作业来使用现有模板并将其应用到我新创建的作业。但是,在我写完必要的配置之后:
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-template代码,我可以看到这是由于该插件中实现的silentSave功能 - 它将配置写入磁盘而不会触发任何保存事件。
我已尝试过Jenkins API可用的方法但我在那里没有成功。关于如何应用我的配置的任何想法?
答案 0 :(得分: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-Templates TemplateUtils类,使用作业使用的模板触发实际的保存事件。值得注意的是,如果作业'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)
答案 1 :(得分:0)
FYI ez-templates 1.3.0现在触发其他保存事件,这样您就不需要上述技巧了。