Jenkins高级篇之Pipeline方法篇-Pipeline Basic Steps-3-方法mail

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011541946/article/details/84034272

这篇重点介绍发送邮件这个方法,或者叫指令,是因为发送邮件这个功能太常用了。这个指令是mail,然后配合几个属性就可以在代码里发送一个比较完整的邮件。我们知道在jenkins中构建之后一般都会执行结果通知,告知构建人和其他项目人员构建的结果是什么状态,一般是失败,成功,取消三种结果。在通过pipeline代码发送邮件之前,你的需要学会在jenkins服务器上配置好smtp邮件服务器。

1.Jenkins服务器上配置smtp服务

这个我在jenkins基础文章有详细介绍,请移步到https://blog.csdn.net/u011541946/article/details/78075250 去学习如何在jenkins上配置QQ作为邮件发送服务。

上面这个图,可能存在错误,需要勾选使用SSL协议。点击上面测试配置如果发送成功,说明邮件配置成功。

2.方法mail

在pipeline代码中通过mail和配合其他options可以完成发送邮件。邮件内容一般是普通的text或者html格式的。我这篇文章都会介绍。先来看看官网对mail的介绍。

看到有很多选项,有些是可选的(带optional),有些是必须的。接下来我就先写必须部分的发送邮件的pipeline代码。

1)最简单的邮件内容

pipeline代码

import hudson.model.*;

println env.JOB_NAME
println env.BUILD_NUMBER

pipeline{
	
	agent any
	stages{
		stage("send mail test") {
			steps{
				script {
					mail to: '[email protected]',
                    subject: "Running Pipeline: ${currentBuild.fullDisplayName}",
                    body: "Something is wrong with ${env.BUILD_URL}"
				}
			}
		}
	}
}

收邮件结果截图

收到邮件和代码对比,邮件标题和正文内容都是对的上的。

2)稍微完整的存文本邮件

上面我只用了subject和body两个选项,下面我多使用几个参数。看看效果。

pipeline代码

import hudson.model.*;

println env.JOB_NAME
println env.BUILD_NUMBER

pipeline{
	
	agent any
	stages{
		stage("send mail test") {
			steps{
				script {
					mail to: '[email protected]',
					cc: '[email protected]',
					charset:'UTF-8', // or GBK/GB18030
					mimeType:'text/plain', // or text/html
                    subject: "Running Pipeline: ${currentBuild.fullDisplayName}",
                    body: "Something is wrong with ${env.BUILD_URL}, just for test send mail via pipeline code"
				}
			}
		}
	}
}

上面我都写了备注,唯一注意的mimeType这个选项默认就是text/plain,下面我要介绍html格式如何写。

发送结果

3)html格式的邮件模板

邮件内容也就是body是可以以html格式来发送的,我这里html+css写的一个简单的邮件模板。具体css内容请看我github项目。我会在module文件里写一个发送邮件的方法,这个方法需要加载css然后写html文件内容和格式,然后pipeline stage文件调这个方法,传相关参数就是可以。

module方法代码

def send_email_results(status,GITBranch,to_email_address_list) {
    def fileContents = readFile env.WORKSPACE + '/testdata/basic_style.css'
    def subject = "Jenkins Job : " + env.JOB_NAME + "/" + env.BUILD_ID + " has " +  status
    def result_url = env.BUILD_URL + "console"
    

    def text = """
  <html>
  <style type="text/css">
  <!--
  ${fileContents}
  -->
  </style>
  <body>
  <div id="content">
  <h1>Summary</h1>
  <div id="sum2">
      <h2>Jenkins Build</h2>
      <ul>
      <li>Job URL : <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a></li>
       <li>Build Result URL : <a href='${result_url}'>${result_url}</a></li>
      </ul>
  </div>
  <div id="sum0">
  <h2>GIT Branch</h2>
  <ul>
  <li>${GITBranch}</li>
  </ul>
  </div>
  </div></body></html>
  """

    mail body: text, subject: subject,  mimeType: 'text/html', to: to_email_address_list
}

pipeline调用代码

import hudson.model.*;

println env.JOB_NAME
println env.BUILD_NUMBER

pipeline{
	
	agent any
	stages{
		stage("init") {
			steps{
				script {
					module_test = load env.WORKSPACE + "/pipeline/module/pipeline-demo-module.groovy"
					println "1 + 1 = 2"
				}
			}
		}
	}
	post{
	    failure {
	        script {
	            module_test.send_email_results("Failed","Master","[email protected],[email protected]")
	        }
	    }
	    success {
	        script {
	            module_test.send_email_results("Success","Master","[email protected]")
	        }
	    }
	}
}

收邮件效果

我的jenkins 测试job:http://65.49.216.200:8080/job/pipeline_basic_steps/39/

这个功能很常用,所以就提取到方法成模块,如果要更好的邮件模板,需要找前端开发人员进行对应调整。邮件正文还可以显示其他项目相关的参数,变量等。

猜你喜欢

转载自blog.csdn.net/u011541946/article/details/84034272