使用Groovy脚本更改Jenkins email-ext插件的默认收件人

时间:2015-01-30 10:05:50

标签: groovy jenkins email-ext

我希望能够根据支持rota修改Jenkins构建电子邮件的默认收件人列表。目前,我正在努力寻找如何做到这一点。

到目前为止,我已经尝试过这个:

import jenkins.model.*;
import org.kohsuke.stapler.*;

def plugin = jenkins.model.Jenkins.instance.getDescriptorByType(hudson.plugins.emailext.ExtendedEmailPublisherDescriptor.class);

println plugin.getClass();

plugin.configure(new StaplerRequest());

我可以看到我成功获得了我想要配置的插件的Descriptor,但不确定从哪里开始。

我现在明白StaplerRequest是一个界面。是否有可以实例化并设置所需参数的实现?

通过查看 email_ext source code,我可以看到我可能要设置的参数是ext_mailer_default_recipients。另外,我可以在配置文件 hudson.plugins.emailext.ExtendedEmailPublisher.xml 中看到我想要更新的XML元素称为recipientList

有人可以建议我怎么做吗?

3 个答案:

答案 0 :(得分:2)

要使用普通Groovy配置Extended Email Publisher,您可以使用以下代码:

extendedMailer = j.getDescriptorByType(hudson.plugins.emailext.ExtendedEmailPublisherDescriptor.class)
extendedMailer.setDefaultSuffix("@server.local")
extendedMailer.setDefaultContentType("text/html")
extendedMailer.setSmtpServer("my-smtp.server.local")
extendedMailer.save()

答案 1 :(得分:0)

我认为您可以使用job-dsl-plugin来更改作业。这将是一个单独的工作(对于你的情况),可以在rota改变时定时关闭

wiki

中所述
def emailTrigger = {
    trigger {
        email {
            recipientList '$PROJECT_DEFAULT_RECIPIENTS'
            subject '$PROJECT_DEFAULT_SUBJECT'
            body '$PROJECT_DEFAULT_CONTENT'
            sendToDevelopers true
            sendToRequester false
            includeCulprits false
            sendToRecipientList true
        }
    }
}

job {
    configure { project ->
        project / publisher << 'hudson.plugins.emailext.ExtendedEmailPublisher' {
              recipientList 'Engineering@company.com'
              configuredTriggers {
                  'hudson.plugins.emailext.plugins.trigger.FailureTrigger' emailTrigger
                  'hudson.plugins.emailext.plugins.trigger.FixedTrigger' emailTrigger
              }
              contentType 'default'
              defaultSubject '$DEFAULT_SUBJECT'
              defaultContent '$DEFAULT_CONTENT'
        }
    }
}

修改

我认为可以使用后面的例子轻松实现这个目标

job {
    publishers {
        extendedEmail('Engineering@company.com') {
            trigger(triggerName: 'Failure', recipientList: '$PROJECT_DEFAULT_RECIPIENTS')
            trigger(triggerName: 'Fixed', recipientList: '$PROJECT_DEFAULT_RECIPIENTS')
        }
    }
}

这是一个部分示例,您需要在进行批量更改之前查看作业模板

答案 2 :(得分:0)

import jenkins.model.*
import hudson.plugins.emailext.ExtendedEmailPublisherDescriptor
Jenkins jenkins
def plugin = jenkins.model.Jenkins.instance.getDescriptorByType(hudson.plugins.emailext.ExtendedEmailPublisherDescriptor.class);
print plugin
plugin.setSmtpServer("your server")
plugin.setDefaultSuffix("your suffix")
plugin.save()

这对我来说很好。