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