为你的 Jenkins 添砖加瓦,构建成功发送邮件到指定邮箱 (Jenkinsfile 版)

本贴最后更新于 642 天前,其中的信息可能已经时异事殊

原文发布于:为你的 Jenkins 添砖加瓦,构建成功发送邮件到指定邮箱(Jenkinsfile 版),欢迎使用 RSS 订阅获取最新更新。
当一个 Jenkins pipeline 的 Stage 过多,或者某个 Stage 太长时,我们一直打开 Jenkins 等着它部署完成是不现实的,等待是最难熬的一件事了。所以要是 Jenkins 部署完自动通知我们就好了。

安装 Extended E-mail Notification 插件

这里我们要用到 Jenkins 的一个插件叫 Email Extension Plugin,可以在 Jenkins 的插件管理中找到。

配置 Email Extension Plugin

在配置 Email Extension Plugin 之前,我们需要准备一个用来发送邮件的邮箱,这里我以腾讯的企业邮箱举例,其他的邮箱也是可以找到类似配置的。

找到发送服务器配置,记录地址和端口

回到 Jenkins 进行配置:

在 Dashboard→Manage Jenkins→Configure System,

Jenkins Location 配置

Extened E-mail Notification 配置,

  • 填入刚刚在企业邮箱中找到的发送服务器域名和端口
  • Default Content Type 选择为 HTML
  • 其他的配置保持默认即可

Jenkins 自带的邮件通知配置

新建 Jenkins pipeline 进行测试

配置

在配置中,只需要注意的是最后的 Pipeline, 我们通过 Jenkinsfile 发送邮件出去,包括邮件模板,这里我们选择 Pipeline script

Pipeline script

  • 添加一个 Stage:只需要输出一下 Hello World 就行
  • 添加 post:post 可以根据 pipeline 或阶段的完成状态,post 部分分成多种条件块,这里处理了三种情况的 success,failure,aborted

post 的详细解释:https://www.jianshu.com/p/909cd0ce98d8

  • EMAIL_CONTENT 拼接邮件模板,为 html 格式,emailext 最后触发邮件,当中的一些 $PROJECT_NAME$JOB_DESCRIPTION 等是 Jenkins 在构建时的内置参数。to: 对应的就是需要接受邮件的邮箱
pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'

            }
        }

    }
    post {
          success {
              script {
                    EMAIL_CONTENT = ''
                        EMAIL_CONTENT += '<hr/>(自动化构建邮件,无需回复!)<br/><hr/>'
                    EMAIL_CONTENT += '项目名称:$PROJECT_NAME<br/><br/>'
                    EMAIL_CONTENT += '项目描述:$JOB_DESCRIPTION<br/><br/>'
                    EMAIL_CONTENT += '运行编号:$BUILD_NUMBER<br/><br/>'
                    EMAIL_CONTENT += '运行结果:$BUILD_STATUS<br/><br/>'
                    EMAIL_CONTENT += '触发原因:${CAUSE}<br/><br/>'
                    EMAIL_CONTENT += '构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><br/>'
                    EMAIL_CONTENT += '构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><br/>'
                    EMAIL_CONTENT += '详情:${JELLY_SCRIPT,template="html"}<br/>'
                    EMAIL_CONTENT += '<hr/>'
                  emailext(subject: '${PROJECT_NAME}构建成功!',to: 'xxx@runnable.run',body: EMAIL_CONTENT)
              }
          }
          failure {
              script {
                    EMAIL_CONTENT = ''
                  EMAIL_CONTENT += '<hr/>(自动化构建邮件,无需回复!)<br/><hr/>'
                    EMAIL_CONTENT += '项目名称:$PROJECT_NAME<br/><br/>'
                    EMAIL_CONTENT += '项目描述:$JOB_DESCRIPTION<br/><br/>'
                    EMAIL_CONTENT += '运行编号:$BUILD_NUMBER<br/><br/>'
                    EMAIL_CONTENT += '运行结果:$BUILD_STATUS<br/><br/>'
                    EMAIL_CONTENT += '触发原因:${CAUSE}<br/><br/>'
                    EMAIL_CONTENT += '构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><br/>'
                    EMAIL_CONTENT += '构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><br/>'
                    EMAIL_CONTENT += '详情:${JELLY_SCRIPT,template="html"}<br/>'
                    EMAIL_CONTENT += '<hr/>'

                  emailext(subject: '${PROJECT_NAME}构建失败!',to: 'xxx@runnable.run',body: EMAIL_CONTENT)
              }
          }
          aborted {
              script {
                    EMAIL_CONTENT = ''
                  EMAIL_CONTENT += '<hr/>(自动化构建邮件,无需回复!)<br/><hr/>'
                    EMAIL_CONTENT += '项目名称:$PROJECT_NAME<br/><br/>'
                    EMAIL_CONTENT += '项目描述:$JOB_DESCRIPTION<br/><br/>'
                    EMAIL_CONTENT += '运行编号:$BUILD_NUMBER<br/><br/>'
                    EMAIL_CONTENT += '运行结果:$BUILD_STATUS<br/><br/>'
                    EMAIL_CONTENT += '触发原因:${CAUSE}<br/><br/>'
                    EMAIL_CONTENT += '构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><br/>'
                    EMAIL_CONTENT += '构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><br/>'
                    EMAIL_CONTENT += '详情:${JELLY_SCRIPT,template="html"}<br/>'
                    EMAIL_CONTENT += '<hr/>'

                  emailext(subject: '${PROJECT_NAME}构建取消!',to: 'xxx@runnable.run',body: EMAIL_CONTENT)
              }
          }
      }
}

测试正常之后我们就可以把 post 那块添加到其他的 Jenkins pipeline 了!

构建效果

完成上面的配置之后进行构建,可以收到对应邮件就完成了!

Successful

Aborted

  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    53 引用 • 37 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...