Child pages
  • Convert standard mail notifications to use the Mail-Ext Publisher plugin

Due to some maintenance issues, this service has been switched in read-only mode, you can find more information about the why

and how to migrate your plugin documentation in this blogpost

Skip to end of metadata
Go to start of metadata

This script replace mail notifications in all projects by Mail-Ext publisher plugin and re-uses existing recipients.
The Mail-Ext is configured with :

  • Recipient list : current recipient list defined in the project (the MailExt isn't activated if the project doesn't have yet a mail notification)
  • Mail subject : default subject from global config
  • Mail body : default body from global config
  • Triggers : Failure, StillFailing, Unstable, StillUnstable, Fixed triggers are activated and send mails to the recipient list

It was tested on Freestyle and Maven projects with Hudson 1.346.

import hudson.plugins.emailext.*
import hudson.plugins.emailext.plugins.trigger.*
import hudson.model.*
import hudson.maven.*
import hudson.maven.reporters.*
import hudson.tasks.*

// For each project
for(item in Hudson.instance.items) {
  def recipients
  println("JOB : "+item.name);
  
  // Find current recipients defined in project
  
  if(item instanceof MavenModuleSet) {
    println(">MAVEN MODULE SET");
    
    // Search for Maven Mailer Reporter
    println(">>Reporters");    
    for(reporter in item.reporters) {
      println(">>> "+reporter);
      if(reporter instanceof MavenMailer) {
        // save recipients
        recipients = reporter.recipients
        // remove reporter
        item.reporters.remove(reporter)
      }
    }
  } else
  if(item instanceof FreeStyleProject) {
    println(">FREESTYLE PROJECT");
  }

  println(">>Publishers");    
  for(publisher in item.publishersList) {
    println(">>> "+publisher);
    // Search for default Mailer Publisher (doesn't exist for Maven projects)
    if(publisher instanceof Mailer) {
      // save recipients
      recipients = publisher.recipients
      // remove publisher
      item.publishersList.remove(publisher)
    } else
    // Or for Extended Email Publisher
    if(publisher instanceof ExtendedEmailPublisher) {
      // save recipients (if it already exist it overrides others values)
      recipients = publisher.recipientList
      item.publishers.remove(publisher)
      // remove it
      item.publishersList.remove(publisher)
    }
  }
  
  // If we found recipients list to send mail
  if(recipients!=null){
    println (">CURRENT RECIPIENT : "+recipients)
    // We create a new Extended Email Publisher
    def eep = new ExtendedEmailPublisher();
    eep.recipientList = recipients
    eep.defaultSubject = "\$DEFAULT_SUBJECT"
    eep.defaultContent = "\$DEFAULT_CONTENT"
    // With some triggers
    eep.configuredTriggers.add(new FailureTrigger(
      email : new EmailType(
        sendToRecipientList : true,
        sendToDevelopers : true,
        includeCulprits : true, 
        body : ExtendedEmailPublisher.PROJECT_DEFAULT_BODY_TEXT, 
        subject : ExtendedEmailPublisher.PROJECT_DEFAULT_SUBJECT_TEXT )))
    eep.configuredTriggers.add(new FixedTrigger(
      email : new EmailType(
        sendToRecipientList : true, 
        sendToDevelopers : true,
        includeCulprits : true, 
        body : ExtendedEmailPublisher.PROJECT_DEFAULT_BODY_TEXT, 
        subject : ExtendedEmailPublisher.PROJECT_DEFAULT_SUBJECT_TEXT )))
    eep.configuredTriggers.add(new StillFailingTrigger(
      email : new EmailType(
        sendToRecipientList : true, 
        sendToDevelopers : true,
        includeCulprits : true, 
        body : ExtendedEmailPublisher.PROJECT_DEFAULT_BODY_TEXT, 
        subject : ExtendedEmailPublisher.PROJECT_DEFAULT_SUBJECT_TEXT )))
    eep.configuredTriggers.add(new StillUnstableTrigger(
      email : new EmailType(
        sendToRecipientList : true, 
        sendToDevelopers : true,
        includeCulprits : true, 
        body : ExtendedEmailPublisher.PROJECT_DEFAULT_BODY_TEXT, 
        subject : ExtendedEmailPublisher.PROJECT_DEFAULT_SUBJECT_TEXT )))
    eep.configuredTriggers.add(new UnstableTrigger(
      email : new EmailType(
        sendToRecipientList : true, 
        sendToDevelopers : true,
        includeCulprits : true, 
        body : ExtendedEmailPublisher.PROJECT_DEFAULT_BODY_TEXT, 
        subject : ExtendedEmailPublisher.PROJECT_DEFAULT_SUBJECT_TEXT )))
    // And we add/replace it in the project
    item.publishersList.replace(eep);
  }else{
    println (">NO RECIPIENT")
  }
   
  println("\n=======\n");
}
  • No labels