Jenkins自定义可编辑的电子邮件内容

时间:2017-02-16 20:38:40

标签: jenkins environment-variables shellexecute

在我的Jenkins步骤中,我有windows batch命令,它运行一个java jar文件( java -Dfile.encoding = UTF-8 -jar C:\ Test1 \ Test.jar C:\ Test \ test.log < / strong>)并且其输出是一个String值(已验证的Jenkins控制台正在打印字符串)。如何使用此字符串内容并插入可编辑的电子邮件内容正文中,以便我可以将此内容作为电子邮件发送。我不希望电子邮件中的整个Jenkins控制台只有这个字符串。我假设在脚本运行后必须将字符串设置为环境变量。不确定我的情况如何才能完全使用EnvInjPlugin,如果可以的话。

2 个答案:

答案 0 :(得分:0)

尝试使用预发送脚本。

例如,您在日志中记录了以下字符串:&#34; 此随机整数应在电子邮件内容中:3432805 &#34; 并希望将随机生成的整数添加到电子邮件内容中。

  1. 使用您想要的任何内容设置默认内容,但添加一些内容 价值将被取代。例如:

    这是build.log中的随机int:TO_REPLACE

  2. 然后点击&#34;高级设置&#34;并添加预发送脚本

    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");
    }
    
  3. 其中:

    • 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

    希望它会对你有所帮助。

答案 1 :(得分:0)

不幸的是,我没有足够的声誉来评论亚历克斯的好答案,所以我写了一个新答案。电话

<块引用>

msg.setContent(contentToSet, "text/plain")

有两个缺点:

  • 特殊字符乱码
  • 附件丢失

所以我使用下面的调用来设置修改后的文本

<块引用>

((javax.mail.Multipart)msg.getContent()).getBodyPart(0).setContent(contentToSet, "text/plain;charset=UTF-8")