Groovy 使用电子邮件前脚本在Jenkins中创建日历条目

Groovy 使用电子邮件前脚本在Jenkins中创建日历条目,groovy,jenkins,email-ext,Groovy,Jenkins,Email Ext,我目前正在使用Jenkins版本1.617和最新的可编辑电子邮件通知插件 我们试图做的是从构建中获取更改并将其放入会议通知(日历条目) 我们目前无法使用lotus notes 8.5.3FP6 以下是插件中的变量: Project Recipient List = $SERVER_GROUP Content Type = HTML(text/html) Default Subject = $DEFAULT_SUBJECT Default Content = $DEFAULT_C

我目前正在使用Jenkins版本1.617和最新的可编辑电子邮件通知插件

我们试图做的是从构建中获取更改并将其放入会议通知(日历条目)

我们目前无法使用lotus notes 8.5.3FP6

以下是插件中的变量:

Project Recipient List = $SERVER_GROUP
Content Type = HTML(text/html)
Default Subject = $DEFAULT_SUBJECT
Default Content = 

       $DEFAULT_CONTENT
    
       Repo: myRepo
       Install Location: S:\Build\VAT - Visual Authoring Tool\SERVICELOGIQ  \GM\VAT_${ENV, var="miniVersion"}\VAT_${ENV,  var="releaseversion"}_SERVICELOGIQ [${ENV, var="BUILD_NUMBER"}]
    
       Change Log: 
       ${CHANGES_SINCE_LAST_SUCCESS, reverse=true, showPaths=true}
我们正在尝试使用以下呈现脚本:

import javax.mail.Message
import javax.mail.Message.RecipientType
import javax.mail.Address
import javax.mail.Multipart
import javax.mail.BodyPart
import javax.mail.internet.InternetAddress
import javax.mail.internet.MimeMessage
import javax.mail.Session
import javax.mail.internet.InternetAddress
import javax.mail.internet.MimeBodyPart
import javax.mail.internet.MimeMessage
import javax.mail.internet.MimeMultipart
import javax.mail.util.ByteArrayDataSource
import java.util.Date
import java.util.Calendar
import java.util.TimeZone
import java.text.DateFormat
import java.text.SimpleDateFormat
import javax.activation.DataHandler
msg.addHeaderLine("method=REQUEST");
msg.addHeaderLine("charset=UTF-8");
msg.addHeaderLine("component=VEVENT");
final Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR, 1);
final Date start = cal.getTime();
cal.add(Calendar.HOUR, 1);
final Date end = cal.getTime();
SimpleDateFormat dateFmt = new SimpleDateFormat("yyyyMMdd'T'hhmmssZ");
String fmtStartDate = dateFmt.format(start);
String fmtEndDate  = dateFmt.format(end);
 
String subject = msg.getSubject()
Multipart multi = (Multipart)msg.getContent()
BodyPart part = multi.getBodyPart(0)
String body = part.getContent().toString()
String from = "jenkins@ignore.com"
Address[] toAddresses = msg.getAllRecipients()
String to = toAddresses.each{ it.toString() }.join(",")
 
String content =
            "BEGIN:VCALENDAR\n"+
            "PRODID:-//Microsoft Corporation//Outlook 9.0 MIMEDIR//EN\n"+ 
            "VERSION:2.0\n" +
            "METHOD:REQUEST\n" +
            "BEGIN:VEVENT\n" +
            "ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE:MAILTO:" + to + "\n" +
            "ORGANIZER:MAILTO:" + from + "\n" +
            "DTSTART:" + fmtStartDate + "\n" +
            "DTEND:" + fmtEndDate + "\n" +
            "LOCATION:Jenkins Build\n" +
            "TRANSP:OPAQUE\n" +
            "SEQUENCE:0\n" +
            "UID:040000008200E00074C5B7101A82E00800000000002FF466CE3AC5010000000000000000100\n" +
            " 000004377FE5C37984842BF9440448399EB02\n" +
            "DTSTAMP:20051206T120102Z\n" +
            "CATEGORIES:Meeting\n" +
            "DESCRIPTION:" + body + "\n\n" +
            "SUMMARY:" + subject + "\n" +
            "PRIORITY:5\n" +
            "CLASS:PUBLIC\n" +
            "BEGIN:VALARM\n" +
            "TRIGGER:PT1440M\n" +
            "ACTION:DISPLAY\n" +
            "DESCRIPTION:Reminder\n" +
            "END:VALARM\n" +
            "END:VEVENT\n" +
            "END:VCALENDAR";
 
// Create the message part 
MimeBodyPart messageBodyPart = new MimeBodyPart();
// Fill the message 
messageBodyPart.setHeader("Content-Class", "urn:content-classes:calendarmessage");
messageBodyPart.setHeader("Content-ID","calendar_message");
messageBodyPart.setDataHandler(new DataHandler(
                new ByteArrayDataSource(content, "text/calendar")));//very important
 
// Create a Multipart 
MimeMultipart multipart = new MimeMultipart();
// Add part one 
multipart.addBodyPart(messageBodyPart);
// Put parts in message 
msg.setContent(multipart);
这是我们从这个脚本中了解到的,看起来这个脚本正在接收一封已经创建的电子邮件,解析这些值并将其更改为日历条目。但是,当我们运行此脚本时,它确实创建了日历条目,但只获取电子邮件默认内容部分的第一行文本

以下是创建的电子邮件示例:

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 9.0 MIMEDIR//EN
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE:MAILTO:myemail
ORGANIZER:MAILTO:jenkins@ignore.com
DTSTART:20150716T123802-0400
DTEND:20150716T013802-0400
LOCATION:Jenkins Build
TRANSP:OPAQUE
SEQUENCE:0
UID:040000008200E00074C5B7101A82E00800000000002FF466CE3AC5010000000000000000100
 000004377FE5C37984842BF9440448399EB02
DTSTAMP:20051206T120102Z
CATEGORIES:Meeting
DESCRIPTION:Check console output at http://localhost:8080/job/Test_Project_Sean2/77/ to view the results.

Repo: http://server/hg/hgweb.cgi/ServiceLogiq
Install Location: S:\Build\VAT - Visual Authoring Tool\SERVICELOGIQ\VAT_SERVICELOGIQ [77]


Change Log: 
Changes for Build #77
No changes



SUMMARY:Test_Project_Sean2 Build Successful!
PRIORITY:5
CLASS:PUBLIC
BEGIN:VALARM
TRIGGER:PT1440M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR
我们的实际会议通知如下所示:

def env = System.getenv()
def version = env['CHANGES_SINCE_LAST_SUCCESS']
在以下位置检查控制台输出: http://servername 到 查看结果。 随附上述电子邮件文件

请注意,输出的行是上面列出的默认内容变量

我们已经尝试了以下方法:

def env = System.getenv()
def version = env['CHANGES_SINCE_LAST_SUCCESS']
但是,这返回了一个空值。
如果能为我们解决问题提供任何帮助,我将不胜感激。

对于日历文件中描述的多行,您需要输入转义\n而不是真正的换行符