你还不会Jenkins?Jenkins插件篇-原生邮件通知和拓展插件的使用和区别

2,381 阅读3分钟

邮件通知能够为我们提供每次Jenkin构建完成时都为我们发送一条邮箱通知,原生Jenkins中已经集成了简单邮箱通知的功能,而同时还有一个邮件的拓展功能,能够让我们更细的进行邮箱通知,通过这篇文章你将学会如何使用两个插件的邮件通知。

原生邮件

我们先看看原生邮箱通知的实现过程吧。

  1. 首先Dashboard -> Manage Jenkins -> Configuration System -> Jenkins Location中配置管理员admin的邮箱地址

image.png

  1. 登录需要配置的邮箱服务器,这里以网易邮箱为例,进入邮箱网站mail.163.com

image.png

向下滑,在授权密码管理中点击新增密码,并按照步骤生成一个授权密码,如图所示:

image.png

  1. Configuration System -> E-mail Notification中配置为Jenkins配置一个邮箱服务器

image.png

勾选Use SMTP Authentication,Username中输入刚刚的网易邮箱,Password输入第二步生成的授权密码 SSL表示是否对邮箱进行加密,如果勾选了SMTP Port使用465端口,如果不加密则使用25端口。

image.png

紧接着Reply-To Address填入Username的网易邮箱,Charset使用默认的UTF-8,可以勾选一下Test Configuration by sending test e-mal来测验一下配置是否成功,当出现·Email was successfully sent·时就代表基本的邮箱配置完成啦

image.png

  1. 基于上面的步骤,我们就成功的为Jenkin配置了一个邮箱服务器,当我们希望项目在构建成功后向指定邮箱发送一个邮件时就可以像下图这样使用:在一个Item的Configure中配置一个Post-build Actions并指定通知的邮箱。

image.png

Email Extension Plugins拓展邮件插件

拓展原生的Email插件,我们刚刚通过原生的只是简单的实现了当构建结束时为指定邮箱发送一条邮件的功能,那么当我们想要自定义邮件的内容,希望邮件能够显示复杂的构件信息,比如当前构建的序号、构建时间、构建JOB名称时,我们就需要借助Email Extension Plugins为我们实现

  1. 首先从Plugins Manager中安装插件并进行配置

image.png

安装好插件之后在Manage Jenkins -> Configuration中会出现Extended E-mail Notification栏,我们以原生插件中的配置同样再配置一次即可

image.png

下面有一些栏目可以不填

image.png

  1. 在项目的路径下创建一个名为EmailTemplate.html的文件并且上传到GIT中(如果不上传的话Jenkins就读不到EmailTemplate.html文件咯)

image.png

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>
<body>
    <table>
        <tr>
            <td>
                <h2>
                    <span style="color: #2eabff">构建结果 - ${BUILD_STATUS}</span>
                </h2>
            </td>
        </tr>
        <tr>
            <td>
                <br/>
                <b><span style="color: #4D90FE">构建信息</span></b>
                <hr size="2" width="100%" align="center">
            </td>
        </tr>
        <tr>
            <td>
                <ul>
                    <li>项目名称:${PROJECT_NAME}</li>
                    <li>构建编号:第${BUILD_NUMBER}次构建</li>
                    <li>触发原因:${CAUSE}</li>
                    <li>构建日志:<a href="${BUILD_URL}console">${BUILD}console</a></li>
                    <li>工作目录:<a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
                    <li>项目URL:<a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
                </ul>
            </td>
        </tr>
        <tr>
            <td>
                <b><span style="color: #0B610B">历史变更记录</span></b>
            </td>
        </tr>
        <tr>
            <td>
                <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a>
            </td>
        </tr>
        <tr>
            <td>
                <b><span style="color: #0B610B">构建日志(尾100行)</span></b>
            </td>
        </tr>
        <tr>
            <td>
                <textarea readonly cols="80" rows="10">
                    ${BUILD_LOG, maxLines=100}
                </textarea>
            </td>
        </tr>
    </table>
</body>


</html>

  1. 在项目Item中添加构建成功后发送邮件 Email Ext好像不能在自由风格类型的项目中使用,所以笔者以pipeline项目为例:

pipeline脚本:

pipeline {
    agent any

    stages { 
        stage('pull') {
            steps {
                checkout(xxxxx)//老套路,因为代码较为复杂所以使用pipeline的片段生成器配置生成
            }
        }

    }
    post{ // 构建成功后阶段
        always{ // 总是执行 还有success、failure
            emailext(
                subject:'构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}',
                body: '${FILE, path="EmailTemplate.html"}', // 在workspace中的Template目录,我们前面使用了GIT拉代码所以就在当前目录的下
                to: '1014723948@qq.com'
            )
        }
    }
}


通过emailext方法指定邮件的标题、内容和接收方即可。

测试结果:

image.png

EmailExt中的环境变量

另外我们也应该学习一下邮件拓展插件中的环境变量具体有哪一些,而不是固定的套用别人的模板

Configure System下Extended E-mail Notification最后一栏有个Content Token Reference右边的小问号点击就可以查看所有的环境变量啦。不过主要用的还是上面模板中的所使用到的BUILD_NUMBER、 BUILD_STATUS、BUILD_URL 等等

image.png