1. 程式人生 > >Jenkins高階篇之Pipeline方法篇-Pipeline Basic Steps-3-方法mail

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

這篇重點介紹傳送郵件這個方法,或者叫指令,是因為傳送郵件這個功能太常用了。這個指令是mail,然後配合幾個屬性就可以在程式碼裡傳送一個比較完整的郵件。我們知道在jenkins中構建之後一般都會執行結果通知,告知構建人和其他專案人員構建的結果是什麼狀態,一般是失敗,成功,取消三種結果。在通過pipeline程式碼傳送郵件之前,你的需要學會在jenkins伺服器上配置好smtp郵件伺服器。

1.Jenkins伺服器上配置smtp服務

上面這個圖,可能存在錯誤,需要勾選使用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]")
	        }
	    }
	}
}

收郵件效果

這個功能很常用,所以就提取到方法成模組,如果要更好的郵件模板,需要找前端開發人員進行對應調整。郵件正文還可以顯示其他專案相關的引數,變數等。