0%

Jenkins 配置邮件通知

配置 Jenkins 邮件用于通知构建结果

  • Jenkins 内置邮件
  • 插件 Email Extension Plugin

Jenkins 设置

Configure System -> Jenkins Location -> System Admin e-mail address 必须要填

然后 E-mail Notification 需要正确填写

  • SMTP server
  • 勾选 Use SMTP Authentication
  • User Name
  • Password

然后填写一个测试邮箱进行测试,以下信息说明邮箱信息出错

com.sun.mail.smtp.SMTPAddressFailedException: 550 5.1.1 <ok>: Recipient address rejected: User unknown in local recipient table

Email Extension Plugin

email-ext

配置正确,不能发送邮件,请升级插件版本解决

全局配置

Configure System -> Extended E-mail Notification

  • SMTP server
  • 勾选 Use SMTP Authentication
  • User Name 必须与 Jenkins Location System Admin e-mail address 一致
  • Password
  • Default Content Type 选择为 HTML
  • Default Recipients 增加默认接收邮箱
  • Default Subject 设置为 构建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS! Default Content!
  • Default Content
(本邮件是程序自动下发的,请勿回复!)<br/><hr/>
项目名称:$PROJECT_NAME<br/><hr/>
构建编号:$BUILD_NUMBER<br/><hr/>
svn 版本号:${SVN_REVISION}<br/><hr/>
构建状态:$BUILD_STATUS<br/><hr/>
触发原因:${CAUSE}<br/><hr/>
构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>
构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>
变更集:${JELLY_SCRIPT,template="html"}<br/><hr/>

调整为

<hr/>
(<B>本邮件是程序自动下发的,请勿回复!<B/>)<br/><hr/>
<font color="red">构建状态 - $BUILD_STATUS</font><hr/>
<font color="green">构建信息</font><hr/>
项目名称:$PROJECT_NAME<li/>
源码地址:http://192.168.110.254/git/goxceed/satellite.git<li/>
构建编号:$BUILD_NUMBER<li/>
触发原因:${CAUSE}<li/>
构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><li/>
构建地址:<a href="$BUILD_URL">$BUILD_URL</a><li/>
变更集:${JELLY_SCRIPT,template="html"}

全局邮件变量

如果你要查看所有可用的变量,你可以点击配置页的 Content Token Reference 的问号获取详细的信息

  • ${BUILD_NUMBER} 显示当前构建的编号。
  • ${JOB_DESCRIPTION} 显示项目描述。
  • ${SVN_REVISION} 显示 svn 版本号。还支持 Subversion 插件出口的 SVN_REVISION_n 版本。
  • ${CAUSE} 显示谁、通过什么渠道触发这次构建。
  • ${CHANGES } - 显示上一次构建之后的变化。
    • showPaths 如果为 true, 显示提交修改后的地址。默认 false。
    • showDependencies 如果为 true,显示项目构建依赖。默认为 false
    • format 遍历提交信息,一个包含 %X 的字符串,其中 %a 表示作者,%d 表示日期,%m 表示消息,%p 表示路径,%r 表示版本。注意,并不是所有的版本系统都支持 %d 和 %r。如果指定 showPaths 将被忽略。默认“[%a] %m\n”。
    • pathFormat 一个包含“%p”的字符串,用来标示怎么打印路径。
  • ${BUILD_ID}显示当前构建生成的 ID。
  • ${PROJECT_NAME} 显示项目的全名。(见 AbstractProject.getFullDisplayName)
  • ${PROJECT_DISPLAY_NAME} 显示项目的显示名称。(见 AbstractProject.getDisplayName)
  • ${SCRIPT} 从一个脚本生成自定义消息内容。自定义脚本应该放在”$JENKINS_HOME/email-templates”。当使用自定义脚本时会默认搜索 $JENKINS_HOME/email-templatesdirectory 目录。其他的目录将不会被搜索。
    • script 当其使用的时候,仅仅只有最后一个值会被脚本使用(不能同时使用 script 和 template)。
    • template 常规的 simpletemplateengine 格式模板。
  • ${JENKINS_URL} 显示 Jenkins 服务器的 url 地址(你可以再系统配置页更改)。
  • ${BUILD_LOG_MULTILINE_REGEX}按正则表达式匹配并显示构建日志。
    • regex java.util.regex.Pattern 生成正则表达式匹配的构建日志。无默认值,可为空。
    • maxMatches 匹配的最大数量。如果为 0,将匹配所有。默认为 0。
    • showTruncatedLines 如果为 true,包含 […truncated ### lines…] 行。默认为 true。
    • substText 如果非空,就把这部分文字(而不是整行)插入该邮件。默认为空。
    • escapeHtml 如果为 true,格式化 HTML。默认为 false。
    • matchedSegmentHtmlStyle 如果非空,输出 HTML。匹配的行数将变为 html escaped matched line 格式。默认为空。
  • ${BUILD_LOG} 显示最终构建日志。
    • maxLines 日志最多显示的行数,默认 250 行。
    • escapeHtml 如果为 true,格式化 HTML。默认 false。
  • ${PROJECT_URL} 显示项目的 URL 地址。
  • ${BUILD_STATUS} - 显示当前构建的状态(失败、成功等等)
  • ${BUILD_URL} - 显示当前构建的 URL 地址。
  • ${CHANGES_SINCE_LAST_SUCCESS} - 显示上一次成功构建之后的变化。
    • reverse 在顶部标示新近的构建。默认 false。
    • format 遍历构建信息,一个包含 %X 的字符串,其中 %c 为所有的改变,%n 为构建编号。默认”Changes for Build #%n\n%c\n”。
    • showPaths,changesFormat,pathFormat 分别定义如 ${CHANGES}的 showPaths、format 和 pathFormat 参数。
  • ${CHANGES_SINCE_LAST_UNSTABLE} - 显示显示上一次不稳固或者成功的构建之后的变化。
    • reverse 在顶部标示新近的构建。默认 false。
    • format 遍历构建信息,一个包含 %X 的字符串,其中 %c 为所有的改变,%n 为构建编号。默认”Changes for Build #%n\n%c\n”。
    • showPaths,changesFormat,pathFormat 分别定义如 ${CHANGES}的 showPaths、format 和 pathFormat 参数。
  • ${ENV} –显示一个环境变量。
    • var– 显示该环境变量的名称。如果为空,显示所有,默认为空。
  • ${FAILED_TESTS} - 如果有失败的测试,显示这些失败的单元测试信息。
  • ${JENKINS_URL} - 显示 Jenkins 服务器的地址。(你能在“系统配置”页改变它)。
  • ${HUDSON_URL} - 不推荐,请使用 $JENKINS_URL
  • ${PROJECT_URL} - 显示项目的 URL。
  • ${SVN_REVISION} - 显示 SVN 的版本号。
  • ${JELLY_SCRIPT} - 从一个 Jelly 脚本模板中自定义消息内容。有两种模板可供配置:HTML 和 TEXT。你可以在 $JENKINS_HOME/email-templates 下自定义替换它。当使用自动义模板时,”template”参数的名称不包含“.jelly”。
    • template 模板名称,默认”html”。
  • ${TEST_COUNTS} - 显示测试的数量。
    • var– 默认“total”。
    • total - 所有测试的数量。
    • fail - 失败测试的数量。
    • skip - 跳过测试的数量。

Jelly 脚本

插件中默认的两个 Jelly 脚本:一个用来设计 HTML 格式邮件,另一个则是定义 TEXT 格式邮件。你能通过使用模板参数指定插件调用哪一个脚本。它们的使用方法如下:

  • 文本格式:${JELLY_SCRIPT,template=”text”}
  • HTML 格式:${JELLY_SCRIPT,template=”html”}

值得注意的是,拥有 Hudson 管理员权限是使用自定义 Jelly 脚本(该脚本没有跟 email-ext 打包)的前提。脚本的生成步骤本身其实相对简单:

  1. 创建 Jelly 脚本。脚本的名称应该是 name.jelly。名称以.jelly 结尾是很重要的。
  2. 把脚本存放在 JENKINS_HOME\email-templates 文件夹里。
  3. 使用 Jelly 变量,让 template 匹配你的脚本名称(不要包含后缀)。比如,脚本的名称为 foobar.jelly,则邮件内容中应该是 ${JELLY_SCRIPT,template=”foobar”}。

Job 配置

Project Recipient List

cc:adminxxx@nationalchip.com, $GERRIT_CHANGE_OWNER_EMAIL, $GERRIT_PATCHSET_UPLOADER_EMAIL
  • groovy 模板

    (本邮件是程序自动下发的,请勿回复!)<br/><hr/>
    
    <table class="section">
      <tr class="tr-title">
        <td class="td-title-main" colspan=2>
          Gerrit Patch Information
        </td>
      </tr>
      <tr>
        <td>Project:</td>
        <td>$GERRIT_PROJECT</td>
      </tr>
      <tr>
        <td>Change-Id:</td>
        <td>$GERRIT_CHANGE_ID</td>
      </tr>
      <tr>
        <td>Commit:</td>
        <td>$GERRIT_PATCHSET_REVISION</td>
      </tr>
      <tr>
        <td>Patch:</td>
        <td><A href="$GERRIT_CHANGE_URL">$GERRIT_CHANGE_NUMBER</A></td>
      </tr>
      <tr>
        <td>PatchSet:</td>
        <td>$GERRIT_REFSPEC</td>
      </tr>
      <tr>
        <td>Subject:</td>
        <td>$GERRIT_CHANGE_SUBJECT</td>
      </tr>
    </table>
    <br/>
    

${SCRIPT, template=”groovy-html.template”}



- Jelly 模板

(本邮件是程序自动下发的,请勿回复!)


GERRIT PATCH INFO
Project: $GERRIT_PROJECT
Change-Id: $GERRIT_CHANGE_ID
Commit: $GERRIT_PATCHSET_REVISION
Patch: $GERRIT_CHANGE_NUMBER
PatchSet: $GERRIT_REFSPEC
Subject: $GERRIT_CHANGE_SUBJECT


${JELLY_SCRIPT, template=”html_gmail”}



## Email Template Testing

在 Job 下存在一个选项 `Jelly/Groovy Template File Name`,用于测试 `Jelly/Groovy` 模板

首先下载 `Jelly/Groovy` 模板,[地址](https://github.com/jenkinsci/email-ext-plugin/tree/master/src/main/resources/hudson/plugins/emailext/te)

[Eamil-ext 文档](https://wiki.jenkins.io/display/JENKINS/Email-ext+plugin#Email-extplugin-Jellycontent)

根据提示需要在 `$JENKINS_HOME` 目录下建立文件夹 `email-templates`,然后将下载的模板拷贝进去就可以测试了

```shell
$ ll ~/.jenkins/email-templates
-rw-rw-r--  1 jenkins jenkins  4633 8 月  24 18:18 groovy-html-larry.html
-rw-rw-r--  1 jenkins jenkins  4560 8 月  24 18:18 groovy-html-larry.template
-rw-rw-r--  1 jenkins jenkins  6316 8 月  24 18:18 groovy-html.template
-rw-rw-r--  1 jenkins jenkins   912 8 月  24 18:18 groovy-text.template
-rw-rw-r--  1 jenkins jenkins 13210 8 月  24 18:18 html_gmail.jelly
-rw-rw-r--  1 jenkins jenkins  9477 8 月  24 18:18 html.jelly
-rw-rw-r--  1 jenkins jenkins 14877 8 月  24 18:18 html-with-health-and-console.jelly
-rw-rw-r--  1 jenkins jenkins  1784 8 月  24 18:18 jelly_pynliner.py
-rw-rw-r--  1 jenkins jenkins 10000 8 月  24 18:18 jive-formatter.groovy
-rw-rw-r--  1 jenkins jenkins   980 8 月  24 18:18 Jive-Formatter-README.md
-rw-rw-r--  1 jenkins jenkins   442 8 月  24 18:18 README.TXT
-rw-rw-r--  1 jenkins jenkins 14862 8 月  24 18:18 static-analysis.jelly
-rw-rw-r--  1 jenkins jenkins  3408 8 月  24 18:18 text.jelly

后缀为 .jelly 用法 ${JELLY_SCRIPT,template="html_gmail"}

后缀为 .template 用法 ${SCRIPT,template="groovy-html.template"}

Ref

  1. Jenkins 邮件通知配置
  2. Jenkins 配置邮件通知
  3. Jenkins 进阶系列之——01 使用 email-ext 替换 Jenkins 的默认邮件通知
  4. jenkins 邮件插件中的内容参数设置详解
  5. jenkins 的可编辑邮件通知 —Jelly 脚本
  6. jenkins 配置邮件及增强版邮件通知
  7. email-ext-plugin
  8. jenkins学习9-测试报告发邮件(Email Extension Plugin)