当前位置: 首页 > 知识库问答 >
问题:

jenkins下游作业如何通过电子邮件文本向上游git提交者发送电子邮件通知

雷国兴
2023-03-14

这个问题是关于如何向在jenkins的下游作业中破坏集成测试的git提交者发送电子邮件,并查看下游作业中的更改列表。

我还没有尝试我在这里写的所有东西,所以我可能是错的,这些是我遇到的代码的印象。

显然,有很多人试图回答这个问题,但没有一个是令人满意的,所以我将详细说明。详情如下:

我们曾经使用svn。我们的作业层次结构是一个作业签出并编译,并触发其他作业,这些作业获取编译工件并对其执行misc集成测试。

电子邮件需要发送到破坏构建的上游svn提交者。

我们喜欢通过电子邮件文本插件(https://wiki.jenkins-ci.org/display/JENKINS/Email-ext插件)发送电子邮件,因为它是非常可定制的,我们大量使用这个功能。

email extplugin使用当前作业的changelog.xml来发现谁破坏了构建.由于changelog.xml是由签出操作创建的,它存在于上游作业中.因此, email-exts似乎不知道它应该给谁发邮件。

如果你决定把罪犯包括在内,你可以从-Dhudson开始。upstreamCulprits=true,这会改变电子邮件ext的行为,但如果您不想包括罪犯,这将无助于您。此外,变更集似乎在下游作业中不可用。

还有一个“上游提交者”插件,但它似乎不能很好地与email-ext配合使用。

上游罪犯和责备上游似乎都需要指纹识别,我们宁愿不要,因为我们有很多文件和工作...这有严重的性能问题。

我们用BlameSubversion插件(https://wiki.jenkins-ci.org/display/JENKINS/BlameSubversion)解决了我们的问题。它显然复制了触发此作业的上游项目的changelog.xml,因此当此作业失败并在变更日志中查找破坏构建的用户时,它可以找到他们,他们也出现在变更日志中。

所以我们很高兴,关于svn。现在,我们迁移到git。没有人指责Git插件。我们不介意写一个。我们只需要知道我们是否应该这样做。人们一起使用git和jenkins已经有一段时间了。我们不可能是第一个遇到这种困难的人。。。

谢谢,内森。

共有1个答案

叶华皓
2023-03-14

这是我在Clearcase上的做法,在svn上应该非常类似。在您输入接收电子邮件的地址列表的区域中,添加以下内容:

,${SCRIPT,SCRIPT=“committers.groovy”}

创建一个新脚本,提交者。groovy在$JENKINS_HOME/email模板中包含以下内容:

// the goal is to find the top level job which should contain the changelist
def upstreamBuild = null
def cause = build.causes.find {
    if(it instanceof hudson.model.Cause.UpstreamCause) {
        return true 
    }
    return false
}

try {
    while(cause != null) {
        upstreamBuild = hudson.model.Hudson.instance.getItem(cause.upstreamProject).getBuildByNumber(cause.upstreamBuild)
        if(upstreamBuild == null) {
            break;
        }
        cause = upstreamBuild.causes.find {
            if(it instanceof hudson.model.Cause.UpstreamCause) {
                return true 
            }
            return false
        }
    }   
} catch(e) {
    // do nothing
}

// now we loop through the changeset and add all the users to a list
committers = []

if(upstreamBuild != null && upstreamBuild.changeSet != null) {
    upstreamBuild.changeSet.each() { cs ->
        if(cs.user != null) {
            committers.add(cs.user)
        }
    }
}

committers.unique().join(',')

这将生成一个字符串,用上游作业的提交者列表替换${SCRIPT}content令牌。

 类似资料:
  • 问题内容: 在我的中,我具有以下内容: 我的电子邮件代码: 当然,如果通过设置调试服务器,则可以在终端中看到该电子邮件。 但是,我实际上如何不将电子邮件发送到调试服务器,而是发送到user@gmail.com? 阅读你的答案后,让我弄明白一点: 你不能使用localhost(简单的ubuntu pc)发送电子邮件吗? 我认为在django 1.3中已经过时了,取而代之的是? 问题答案: 将电子邮件

  • 问题内容: 我正在使用。 使用发送电子邮件(通过)的最佳方法是什么? 问题答案: 有关使用Outlook的解决方案,请参见下面的TheoretiCAL答案。 否则,请使用python随附的smtplib。请注意,这将要求您的电子邮件帐户允许smtp,默认情况下不一定启用此功能。 编辑: 此示例使用保留域,如RFC2606中所述 为了使它真正与gmail配合使用,Doe先生需要进入gmail中的选项

  • 我使用的PHPMailer表格在这里找到。 从网站下载的示例是“接触-3”,在引导主题中使用PHPMailer通过gmail发送SMTP电子邮件。当我使用“接触-1”时,它完全适用于我的托管域电子邮件地址,但SMTP版本适用于gmail地址,联系人表单不会提交。 在下面的代码中,我更改了以下行以添加我的gmail地址和gmail密码: 任何关于使用给定信息进行此工作的帮助都将不胜感激-提前感谢!

  • 我在网上看到了很多代码,但它们似乎都遇到了问题。 使用以下功能创建并保存文件: 然而,当运行下面的代码来发送文件时,我一直遇到问题,并建议使用此链接的所有答案https://stackoverflow.com/questions/48117511/exposed-beyond-app-through-clipdata-item-geturi,当打开Gmail时,它说无法附加文件 如果有任何方法可以

  • 我使用Jenkins Email ext插件在作业开始和结束时(如果作业成功)发送电子邮件通知。我希望这些通知成为一个电子邮件线程的一部分(而不是同一主题的单独电子邮件)。 我查看了全局Jenkins配置中的所有设置,并在后期构建部分尝试了不同的可编辑电子邮件通知选项。到目前为止运气不好。 有一个功能请求Email ext plugin添加“In Reply to”字段,根据请求的描述,它应该可以

  • 请让我知道通过邮件自动发送TestNG可电子邮件报告而不添加外部jar的最佳方式。