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