什么是流水線
現(xiàn)實(shí)中的流水線
流水線比較好理解,類比于現(xiàn)實(shí)生活中的生產(chǎn)流水線,每個(gè)流程只做一件事,通過傳送帶把這些流程連接在一起,一個(gè)流程完成后的結(jié)果交由后續(xù)流程繼續(xù)操作。
Jenkins的流水線簡單認(rèn)知
Jenkins的流水線也是這樣工作的,最簡單的認(rèn)知是它可以把若干可通用的Shell腳本像膠水一樣連接起來,雖然這個(gè)比喻比較形象,但這只是流水線的冰山一角。
Jenkins流水線的兩種形式
在Jenkins升級2.x版本之前,流水線只有一種腳本式流水線(Script Pipeline),當(dāng)升級2.x版本后,新增了聲明式流水線(Declarative Pipeline)
什么是Jenkinsfile
無論是哪種流水線,都需要為流水線定義流水線腳本,稱之為Jenkinsfile ,使用Groovy語法寫成
腳本式流水線
在說明聲明式流水線前,有必要了解一下腳本式流水線的基本概念,這樣有利于我們知道聲明式流水線的好處與腳本式流水線的限制
特征
在腳本化流水線語法中, 一個(gè)或多個(gè) node 塊在整個(gè)流水線中執(zhí)行核心工作。
限制
雖然這不是腳本化流水線語法的強(qiáng)制性要求, 但它限制了你的流水線的在node塊內(nèi)的只能做兩件事:
- 需要通過在Jenkins隊(duì)列中添加一個(gè)項(xiàng)來調(diào)度塊中包含的步驟。 節(jié)點(diǎn)上的執(zhí)行器一空閑, 該步驟就會(huì)運(yùn)行。
- 創(chuàng)建一個(gè)工作區(qū)(特定為特定流水間建立的目錄),其中工作可以在從源代碼控制檢出的文件上完成。
基本語法
Jenkinsfile (Scripted Pipeline)
node { //需要有一個(gè)或多個(gè)node節(jié)點(diǎn)表示一系列操作
stage('Build') { //每個(gè)stage表示一個(gè)步驟
// Build步驟內(nèi)容
}
stage('Test') {
// Test步驟內(nèi)容
}
stage('Deploy') {
// Deploy步驟內(nèi)容
}
}
聲明式流水線的基本語法類似于腳本式流水線,但是其功能更加強(qiáng)大
聲明式流水線基礎(chǔ)
特征
聲明式流水線最外層Jenkinsfile腳本節(jié)點(diǎn)是pipeline
與腳本式流水線不同點(diǎn)
聲明式和腳本化的流水線從根本上是不同的。 聲明式流水線的是 Jenkins 流水線更近的特性:
- 相比腳本化的流水線語法,它提供更豐富的語法特性,
- 是為了使編寫和讀取流水線代碼更容易而設(shè)計(jì)的。
基礎(chǔ)語法
Jenkinsfile (Declarative Pipeline)
pipeline { // pipeline是聲明式流水線的一種特定語法,在塊內(nèi)定義了整個(gè)流水線的所有內(nèi)容
agent any // agent是聲明式流水線的一種特定語法,它指示 Jenkins 為整個(gè)流水線分配一個(gè)執(zhí)行器 (在節(jié)點(diǎn)上)和工作區(qū),等效于腳本式流水線node塊
stages { // 所有流程(狀態(tài))的外層塊,僅有一個(gè)
stage('Build') { //每個(gè)stage為一流程,與腳本式基本一致,每個(gè)stage可以定義名稱
steps { //步驟塊,內(nèi)部包含具體操作
sh 'make' // sh操作,其引號間的文字會(huì)當(dāng)成shell直接執(zhí)行
}
}
stage('Test'){
steps {
sh 'make check'
junit 'reports/**/*.xml' //junit使用匹配的定義測試xml進(jìn)行單元測試
}
}
stage('Deploy') {
steps {
sh 'make publish'
}
}
}
}
使用jenkins的Blue Ocean插件運(yùn)行構(gòu)建:
Jenkinsfiles文件:






