如何检索(或重新创建)jenkins邮件插件后构建电子邮件文本

时间:2018-04-20 14:03:53

标签: jenkins jenkins-plugins

如果Jenkins构建失败,会向使用Jenkins Mailer插件的所有开发人员发送一封电子邮件。见https://wiki.jenkins.io/display/JENKINS/Mailer

这封电子邮件非常有助于快速识别最近对源代码做出贡献的作者,并可能成为打破构建的罪魁祸首。

我的目标很简单:

String emailText = "Email Content Here";

即。我希望根据自己的需要检索电子邮件文本,并对其进行自己的解析。

我最初尝试解决此问题的方法是使用基本身份验证来获取控制台输出:

    // Credentials
    String username = "some.username";
    String password = "USER_API_TOKEN";

    // Jenkins url
    String url = "https://[my-company-domain]/job/Team-Servers/job/teamserver-asc/85/consoleText";

    String consoleText = getConsoleText(username, password, url);

这很棒!我能够获得控制台文本。然而,它没有提供作者,因为电子邮件...有任何想法如何检索此电子邮件的程序化目的。还是重新创造它?

电子邮件的格式为:

Authors:
 John Doe

Changes:
    John Doe: ce1ec6623567802d2fbc2cb5fb194d927835e466 
    - src/com/a/somePath/someFile.java
    - ivy.xml


Build Log:
  [...truncated 147.59 KB...]
     [java] [GC 3779195K->1885262K(4954624K), 0.2512120 secs]
     ...

BUILD FAILED
/u/jenkins/workspace/somePath/build.xml:1761: Java returned: 1

Total time: 52 minutes 56 seconds
Build step 'Invoke Ant' marked build as failure
Email was triggered for: Failure - Any
Sending email for trigger: Failure - Any

2 个答案:

答案 0 :(得分:1)

你到底是怎么做到的?使用Groovy脚本,管道或使用curl ??

根据您提供的信息而定 "https://[my-company-domain]/job/Team-Servers/job/teamserver-asc/85/consoleText"

你直接指向buildNumber(85)并读取consoleText,它工作正常,所以为什么不指向
"https://[my-company-domain]/job/Team-Servers/job/teamserver-asc/85/Changes" 获取更改实现者,如果数据不存在则转移到父文件夹,如此 "https://[my-company-domain]/job/Team-Servers/Changes"
猜测(Team-Servers是构建名称) 你肯定会在这里看到最新的变更实现者。

再次需要知道您的编码如何提供更好的信息

答案 1 :(得分:1)

您可以为构建调用getCulprits()函数(http://javadoc.jenkins-ci.org/hudson/model/AbstractBuild.html

实施例

import hudson.tasks.Mailer;

def build = Jenkins.instance.getItemByFullName("TestBuild").getBuildByNumber(4)
def culprits = build.getCulprits()

for(culprit in culprits) {
    println culprit 
    def id = culprit.getId()
    User u = User.get(id)
    def umail = u.getProperty(Mailer.UserProperty.class)
    println "Email address is " + umail.getAddress()
}

这将打印输出

First_Last
Email address is first.last@gmail.com
Foo_Bar
Email address is foo.bar@gmail.com

如果将此与您已有的电子邮件文本结合使用,我认为这可以满足您的需求。