軟件測試 | Script Pipeline
Declared Pipeline 的入門學(xué)習(xí)難度相對不高,這種類似我們在做自動化測試時(shí)所接觸的關(guān)鍵字驅(qū)動模 式,只要理解其定義好的關(guān)鍵詞,按要求填充數(shù)據(jù)即可。
雖然這種方式入門容易,但靈活性欠缺。相比之下 script Pipeline 的好處就是靈活,好封裝,易于大規(guī) 模使用,但需要有一定的編程功底。
Script Pipeline 語句樹

一個(gè) Script Pipeline 可以劃分成若干個(gè) Stage,每個(gè) Stage 代表一組操作,例如 Build,Test;Node 代 表 Jenkins 節(jié)點(diǎn),比如 Master, Slave 這樣的節(jié)點(diǎn);Step 是最基本的操作單元,在對應(yīng) Node 節(jié)點(diǎn)上執(zhí)行 的動作語句直接寫在 node {} 中。
Script Pipleline 語句樹
流程控制語句
如同傳統(tǒng)的腳本語言一樣,Script Pipeline 是從上至下順序執(zhí)行,可以使用 Groovy 表達(dá)式進(jìn)行流程控 制,如 if/else 語句通過邏輯條件判斷來對流程進(jìn)行控制:
node {
stage('Example') {
if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}
}
}
異常處理語句
Script Pipeline 腳本流程控制的另一種方式是異常處理機(jī)制。當(dāng)任何一個(gè)步驟因各種原因而出現(xiàn)異常時(shí), 都必須在代碼中使用 try/catch/finally 語句塊進(jìn)行異常捕獲,并通過預(yù)先設(shè)定代碼進(jìn)行處理,保證腳本能 夠順利執(zhí)行:
stage('Error Handling') {
node{
echo "This is test demo for the error handling"
try {
echo "This is in the try block."
sh 'exit 1'
}catch (exc) {
echo "Something failed, I'm in the catch block."
}finally {
echo "Finally, I'm in the finally block."
}
}
}
Jenkinsfile 中調(diào)用 plugin 功能
在 Jenkinsfile 中除了可以使用常規(guī)的邏輯、流程控制,還可以調(diào)用 Jenkins 的插件功能。下面用如下實(shí) 例進(jìn)行說明。
Email Extension 插件
Email Extension 是 Jenkins 中的一個(gè)外部插件,用來發(fā)送郵件,從 Jenkins 的 Plugin Manager 中進(jìn)行安 裝。在 Pipeline 中通過代碼調(diào)用可以觸發(fā)該插件的運(yùn)行,實(shí)現(xiàn)發(fā)送郵件的功能。
基礎(chǔ)配置
在安裝好 Email Extension 插件之后,首先需要選擇一個(gè)準(zhǔn)備用來發(fā)送 Jenkins 通知郵件的郵箱,發(fā)件郵 箱的具體參數(shù)要提前知曉(通常參數(shù)可以從郵箱的配置參數(shù)信息頁面上查到);之后要在 Manage Jenkins -> Configure System 中將對應(yīng)參數(shù)填寫該插件的對應(yīng)配置項(xiàng)中,必須配置的參數(shù)如下:
SMTP server:smtp 服務(wù)地址
SMTP port:smtp 端口號
Use SMTP Authentication:啟用 smtp 安全校驗(yàn)
User Name:發(fā)件人用戶名
Password:發(fā)件人密碼
Default Recipients:默認(rèn)收件人
其他的參數(shù)可以根據(jù)自己的需要進(jìn)行配置,Email Extension 配置參考截圖如下:

Pipeline代碼
pipeline{
agent {
label 'master'
}
stages{
stage('發(fā)送郵件測試') {
steps{
echo 'Test Email'
}
}
}
post {
always {
emailext body: '$DEFAULT_CONTENT', recipientProviders: [[$class:
'RequesterRecipientProvider']], subject: '$DEFAULT_SUBJECT'
}
}
}