2011-11-03 282 views
3

我正在嘗試使用Groovy和email-ext插件來定製電子郵件。當我爲這些電子郵件添加新功能時,我可能會在腳本中引入錯誤,並因此收到包含StackTrace的錯誤郵件。所以,我希望能夠發送完成的工作通知,因爲我的工作可能需要幾個小時(目前超過4個)。
有沒有辦法讓jenkins發送完成的工作通知(使用Groovy或任何其他腳本語言)?Jenkins - 電子郵件通知

+0

的電子郵件-EXT插件可以根據生成的結果,使用不同的模板(果凍腳本)。如果構建失敗,您可以配置該插件發送不同的郵件,如果成功並在其他場合下使用......這不是您要查找的內容嗎? –

+0

嗨,我已經配置了這些觸發器,但我的需求是添加新功能到鏈接到這些觸發器的電子郵件,所以我希望能夠通過傳遞的作業發送這些通知。 – Dominique

+0

你的意思是[email-ext] [1]插件中的觸發功能嗎? [1]:http://stackoverflow.com/questions/8321649/gitweb-how-to-display-markdown-file-in-html-format-automatically-like-github –

回答

0

找到一個解決方案:

import java.text.SimpleDateFormat; 
import java.util.GregorianCalendar; 
import groovy.text.Template 
import groovy.text.SimpleTemplateEngine 
import javax.mail.* 
import javax.mail.internet.* 

//-------------- Job params -------------- 
projectName="YourProjectName"; 
buildNum = 10; 
templateName="groovy-html-cobertura.template"; 
recipients="[email protected]"; 
sender="[email protected]"; 
smtpHost="mysmtphost"; 
//------------End Job params ------------- 

for (hudson.model.AbstractProject p : hudson.model.Hudson.instance.projects) { 
    if(p.name.equals(projectName)){ 
    for (hudson.model.AbstractBuild b : p.getBuilds()) { 
     if(b.getNumber() == buildNum){ 
     println b; 
     b.reload(); 
     def binding = [ "build" : b, 
         "project" : b.getProject(), 
         "rooturl" : hudson.model.Hudson.getInstance().getRootUrl(), 
         "it" : new  hudson.plugins.emailext.plugins.content.ScriptContentBuildWrapper(b), 
         "spc" : "  " ] 
     def engine = new SimpleTemplateEngine() 
     java.io.File file = new java.io.File(hudson.model.Hudson.getInstance ().getRootPath().getBaseName()+"/email-templates/"+templateName); 
     mailBody = engine.createTemplate(file.getText()).make(binding).toString(); 
     port = 25 
     props = new Properties() 
     props.put('mail.smtp.host', smtpHost) 
     props.put('mail.smtp.port', port.toString()) 
     session = Session.getDefaultInstance(props, null) 

     // Construct the message 
     msg = new MimeMessage(session) 
     msg.from = new InternetAddress(sender) 
     msg.sentDate = new Date() 
     msg.subject = 'Template Test' 
     msg.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients)) 
     msg.setHeader('Organization', 'i-BP') 
     msg.setContent(mailBody, 
        'text/html') 
     // Send the message 
     Transport.send(msg) 
     } 
    } 
    } 
}