【问题标题】:Jenkins Customize Editable Email ContentJenkins 自定义可编辑的电子邮件内容
【发布时间】:2017-07-06 03:59:48
【问题描述】:
在我的 Jenkins 步骤中,我有运行 java jar 文件的 windows 批处理命令 (java -Dfile.encoding=UTF-8 -jar C:\Test1\Test.jar C:\Test\test.log) 并且其输出是一个字符串值(已验证 Jenkins 控制台正在打印该字符串)。我将如何使用此字符串内容并插入可编辑的电子邮件内容正文,以便我可以将此内容作为电子邮件发送。我不希望电子邮件中的整个 Jenkins 控制台只有这个字符串。我假设在脚本运行后必须将字符串设置为环境变量。如果可以的话,我不确定在我的场景中如何使用 EnvInjPlugin。
【问题讨论】:
标签:
jenkins
environment-variables
shellexecute
【解决方案1】:
尝试使用预发送脚本。
例如,您在日志中有如下字符串:“此随机整数应在电子邮件内容中:3432805”
并希望将随机生成的整数添加到电子邮件内容中。
-
用你想要的任何东西设置默认内容,但添加一些
将被替换的值。例如:
这是来自 build.log 的随机整数:TO_REPLACE
-
然后点击“高级设置”并添加预发送脚本:
String addThisStringToContent = "";
build.getLog(1000).each() { line ->
java.util.regex.Pattern p = java.util.regex.Pattern.compile("random\\sinteger.+\\:\\s(\\d+)");
java.util.regex.Matcher m = p.matcher(line);
if (m.find()) {
addThisStringToContent = m.group(1);
}
}
if (addThisStringToContent == "") {
logger.println("Proper string not found. Email content has not been updated.");
} else {
String contentToSet = ((javax.mail.Multipart)msg.getContent()).getBodyPart(0).getContent().toString().replace("TO_REPLACE", addThisStringToContent);
msg.setContent(contentToSet, "text/plain");
}
地点:
-
build.getLog(1000) - 检索最后 1000 行构建输出。
-
Pattern.compile("random\\sinteger.+\\:\\s(\\d+)") - 正则表达式找到正确的字符串
-
"text/plain" - 内容类型
-
String contentToSet = ((javax.mail.Multipart)msg.getContent()).getBodyPart(0).getContent().toString().replace("TO_REPLACE", addThisStringToContent); - 将字符串 TO_REPLACE 替换为您的值
希望对你有所帮助。
【解决方案2】:
不幸的是,我没有足够的声誉评论亚历克斯的好答案,所以我写了一个新的答案。来电
msg.setContent(contentToSet, "text/plain")
有两个缺点:
所以我使用下面的调用来设置修改后的文本
((javax.mail.Multipart)msg.getContent()).getBodyPart(0).setContent(contentToSet, "text/plain;charset=UTF-8")