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

Jenkins整合电子邮件通知

阮星火
2023-03-14

我有一个Jenkins项目,由3个简单的自由风格的作业组成,每个作业都有自己的构建奴隶。每个作业都绑定到一个单独的平台上:linux、mac或windows。当一个开发人员提交他们的代码时,Jenkins在民意测验后不久,在每个构建奴隶上构建项目,每个项目都向开发人员发送一封电子邮件,描述构建是否失败或成功。问题:每次scm更改有三封单独的电子邮件真的会垃圾邮件发送到开发人员的收件箱,尤其是那些喜欢经常提交小更改的人的收件箱。因此,他们可能会完全忽略这些电子邮件。

问:有没有办法(通过插件或项目重组)将三封成功/失败的电子邮件合并到一封电子邮件中?我已经研究了电子邮件文本插件、多任务插件和构建多配置项目选项,但似乎找不到改变项目结构的方法,以至于只向开发人员发送一封电子邮件,描述哪些作业失败或成功。我怀疑你必须将这些作业合并到一个单一的多任务项目中,并在发送前检查在每个平台上构建的结果,但我不知道。詹金斯的很多事情我还没有弄清楚。

如果你们能给我任何建议,我将不胜感激。

共有2个答案

史默
2023-03-14

如果你有'n'自由式工作,你必须得到一个单一的电子邮件通知,然后去多工作插件詹金斯。这是一种方法。在这里,您可以按顺序或并行方式运行作业。要将结果整合到一封电子邮件中,您需要额外的插件,如复制工件Groovy。

下面我举了一个例子,我需要在1封电子邮件中获得2个自由式作业作业A和作业B的结果

(先决条件:-多作业、工件、Groovy插件安装在jenkins中运行作业的节点应至少有2个执行器)要遵循的步骤。

  1. 创建一个多任务项目(命名为'Master')
  2. 在添加生成步骤中----

下面给出了一个groovy脚本,我用它迭代我的subbobs结果,然后获得pass percentage,以决定是否需要将master的状态设置为success或failed。这里我的工作结果是nunit结果。

        import hudson.model.*
        import com.tikal.jenkins.plugins.multijob.*


        void log(msg) {
        manager.listener.logger.println(msg)
        }

        def boolean findpercent(int pass,int total) 
        {
        log 'Entered the function find percent' 
        def float percent = 0.0
        log percent
        percent = (pass/total) * 100
        log percent
        if(percent >= 90.0)
        {
            return true
        }else
        {
            return false
        }
        }

        threshold = Result.SUCCESS

        void aggregate_results() {
        def failed = false
        def  int totalTestCases = 0
        def  int  failedTestCases = 0
        def  int  passedTestcases = 0
        def  int skipTestcases = 0
        mainJob = manager.build.getProject().getName()
        job = hudson.model.Hudson.instance.getItem(mainJob)


        log '-------------------------------------------------------------------------------------'
        log 'Aggregated status report'
        log '-------------------------------------------------------------------------------------'

        log mainJob
        log job
        log manager.build.getNumber()
        log manager.build.getResult()

        job.getLastBuild().getSubBuilds().each { subBuild->
        subJob = subBuild.getJobName() 
        subJobNumber = subBuild.getBuildNumber()
        job1 = hudson.model.Hudson.instance.getItem(subBuild.getJobName())
        build = job1.getBuildByNumber(subJobNumber)
        log build
        log job1.getLastCompletedBuild().getResult()
        log job1.getLastCompletedBuild().getTestResultAction()
        log build.getResult()
        log subJobNumber 
        log subJob 
        log job1 
        log subBuild
        log build.getAllActions()
        log '-------------------------------------------------------------------------------------'
        log 'build.getTestResultAction()'
        log '-------------------------------------------------------------------------------------'
        log build.getTestResultAction()
        testResult = build.getTestResultAction()
        log testResult
        if (testResult != null) {
                total = testResult.getTotalCount()
                log total
                log totalTestCases
                totalTestCases += total
        log  totalTestCases 
                             failures = testResult.getFailCount()   
        log  failures 
        log failedTestCases  
                failedTestCases  +=    failures
        log failedTestCases  
                            skip = testResult.getSkipCount()
        log skip 
        log skipTestcases 
                skipTestcases +=  skip
                pass = total - (failures  + skip )
                log pass 
        passedTestcases += pass
        log pass 
        log passedTestcases 
                }
        }
        log 'Total testcases run'
        log totalTestCases 
        log 'Total failedTestCases'
        log failedTestCases 
        log 'Total skipTestcases'
        log skipTestcases 
        log 'Total passedTestcases'
        log passedTestcases
        log 'End Result'
        if(findpercent(passedTestcases,totalTestCases)) {
                   log 'success'
            manager.build.setResult(hudson.model.Result.SUCCESS)
        }else
           {
                    log 'failure'
            manager.build.setResult(hudson.model.Result.FAILURE)
        } 

         log 'time taken'
         log manager.build.getTimestampString()
         log 'Time End'

        }

        try 
        {
        aggregate_results()
        } 
        catch(Exception e) {
        log('ERROR: ${e.message}')
        log('ERROR: Failed Status report aggregation')

        }

现在在可编辑的电子邮件通知中,我使用BUILD_LOG_摘录来获得所需的值。例如${BUILD_LOG_extract,start=“Total passedTestcases”,end=“end Result”}这将返回变量passedTestcases的值,因为它位于LOG Total passedTestcases和end Result之间

注意:-运行作业的从属节点应该至少有2个执行器。因为在这里master将一直运行到所有子作业运行。所以如果它顺序运行,你将需要两个执行器。如果你需要并行运行,你需要n个执行器(n-1个子作业和1个主作业)。

司寇照
2023-03-14

“可编辑电子邮件通知”发布者(来自Email ext)有一个设置来决定如何处理矩阵(多配置)项目。

您可以将“矩阵项目触发器”配置为“仅触发父作业”,这应该可以实现您想要的。

同样地,您也可以将其配置为“为每个配置触发”以获得现在的结果,或者为两个配置都配置为“为父配置和每个配置触发”。

 类似资料:
  • 问题内容: 我有一个Jenkins项目,其中包含3个简单的自由样式作业,每个作业都有自己的构建从属。每个作业都绑定到一个单独的平台:Linux,Mac或Windows。当开发人员提交他们的代码时,Jenkins在轮询回购后不久,在每个构建从属上构建项目,然后每个项目都向开发人员发送电子邮件,描述构建是成功还是失败。 问题: 每scm更改会单独发送三封电子邮件,这实际上是在向开发人员的收件箱发送垃圾

  • 问题内容: 环境: Windows 2008 R2 Jenkins1.580.2 LTS Mailer plugin 1.12 Email Extension Plugin 2.39 Java 8 在将我的Jenkins CI服务器配置为在移至Office365中的“企业”帐户后发送电子邮件通知时遇到一些问题。所以这是我的配置: Jenkins从StartTLS支持开始(带有参数’-Dmail.s

  • 问题内容: 我尝试将jenkins配置为使用gmail作为POP提供程序发送电子邮件通知,但无法成功 测试失败:拒绝连接 javax.mail.MessagingException:无法连接到SMTP主机:pop.gmail.com,端口:995;嵌套的异常是:java.net.ConnectException:连接被拒绝:connect 问题答案: Google SMTP服务器的主机名是smtp

  • 问题内容: 我们已经配置了Jenkins-可编辑的电子邮件通知模板,以便在每次构建后发送自定义的电子邮件。 我们做了什么 : 在下一节中的脚本中,然后在下一节中,我们添加了默认的groovy脚本(例如:groovy-html.template-复制粘贴内容)。保存。 现在在项目工作下的 “构建后” 部分下,我们选择了相同的模板 但是,当我们收到电子邮件时,电子邮件就不会替换环境变量了。 ${bui

  • Editable Email Notification插件-如果邮件服务器无法到达(端口25),或者由于某种原因,如果edit Email Notification post操作失败(对于我们在作业配置中设置的各种触发器),则整个构建失败。 现在,如果我有一个Build/Deploy作业成功完成(在做主要工作时),但在发送电子邮件部分失败(由于邮件服务器的问题),那么为什么它将整个作业标记为失败。

  • 本文向大家介绍Bosun 电子邮件通知,包括了Bosun 电子邮件通知的使用技巧和注意事项,需要的朋友参考一下 示例 要发送电子邮件通知,您需要在配置文件中添加以下设置: