pipeline 是什么
從某種抽象層次上講,部署流水線(Deployment pipeline)是指從軟件版本控制庫(kù)到用戶手中這一過程的自動(dòng)化表現(xiàn)形式呢簸。
Jenkins 2.x 支持 pipeline as code,可以通過”代碼“來描述部署流水線。
使用"代碼”而不是UI的意義在于:
- 更好地版本化:將pipeline提交到軟件版本庫(kù)中進(jìn)行版本控制。
- 更好地協(xié)作: pipeline的每次修改對(duì)所有人都是可見的吟逝。除此之外帽蝶,還可以對(duì)pipeline進(jìn)行代碼審查赦肋。
- 更好的重用性:手動(dòng)操作沒法重用块攒,但是代碼可以重用。
總結(jié):創(chuàng)建Jenkins 項(xiàng)目盡量使用 pipeline 風(fēng)格佃乘。是2.x最大特別囱井,也是官方主推的特性,是發(fā)展趨勢(shì)趣避。
Jenkinsfile 是什么
Jenkinsfile就是一個(gè)文本文件庞呕,也就是部署流水線概念在Jenkins中的表現(xiàn)形式。像Dockerfile之于Docker程帕。所有部署流水線的邏輯都寫在Jenkinsfile中住练。
建議把Jenkinsfile跟項(xiàng)目源碼一塊加入到版本控制中,這樣方便項(xiàng)目成員了解構(gòu)建構(gòu)建和流程愁拭。當(dāng)然出于安全讲逛,有些環(huán)境變量和參數(shù)等可以管理在Jenkins管理平臺(tái)上。具體后續(xù)會(huì)有介紹岭埠。
pipeline 基本構(gòu)成
寫 pipeline 就是寫 Groovy 代碼盏混,Jenkins pipeline 其實(shí)就是基于Groovy語(yǔ)言實(shí)現(xiàn)的一種領(lǐng)域DSL(Domain Specific Language)。
Jenkins pipeline支持兩種語(yǔ)法惜论,聲明式和腳本式许赃,前者簡(jiǎn)單,結(jié)構(gòu)化好馆类,后者靈活混聊,擴(kuò)展性好,但是需要對(duì)Groovy比較熟練蹦掐。
聲明式語(yǔ)法更符合閱讀習(xí)慣技羔,所有示例都會(huì)使用聲明式語(yǔ)法。
pipeline的內(nèi)容包含執(zhí)行編譯卧抗、打包藤滥、測(cè)試、輸出測(cè)試報(bào)告等步驟社裆。
如下圖拙绊,聲明式pipeline的語(yǔ)法結(jié)構(gòu)概覽,粗線邊框的表示必需的
image.png
例1 一個(gè)最簡(jiǎn)單的聲明式pipeline
pipeline {
agent any
// stages 包含一個(gè)或多個(gè)階段(stage)的容器
stages {
// stage 階段泳秀,pipleline流水線由一個(gè)或多個(gè)階段(stage)組成标沪,每個(gè)階段必須有名稱,這里build就是此階段的名稱
stage('build') {
// steps嗜傅,階段中的一個(gè)或多個(gè)具體步驟(step)的容器
steps {
# 這是是具體的步驟金句,真正”做事“的,不可再拆分的最小操作
echo "hello world"
}
}
}
}
- 所有的聲明必須包含在 pipeline 語(yǔ)句塊中吕嘀。
- 塊只能由 stage, directives (指令违寞,后續(xù)會(huì)講到) 或 steps 組成贞瞒。
- agent:指定流水線的執(zhí)行位置,流水線中的每個(gè)階段都必須在某個(gè)地方(物理機(jī)趁曼,虛擬機(jī)或 Docker 容器)執(zhí)行军浆,agent 部分即指定具體在哪里執(zhí)行。
- echo 是內(nèi)置命令挡闰,用來輸出一段文本乒融,還有些命令是安裝插件后才有的,參見官方文檔摄悯。
- step: 步驟赞季,可拆分最小單元,真正“做事”的語(yǔ)句奢驯。如
echo "hello world"
表示輸出一句話碟摆。
有些插件安裝后可以直接在pipeline中使用,如發(fā)送郵件的
Extended E-mail Notification
叨橱,安裝后可以直接steps { emailext to: 'mafeifan@qq.com', subject: "test", body: "an email"}
來發(fā)送郵件