Jenkins Pipeline 簡介
Jenkins pipeline 是 Jenkins 2.0 的精髓,,是幫助 Jenkins 實現 CI 到 CD 轉變的重要角色。
簡單來說,就是一套運行於 Jenkins 上的工作流框架,將原本獨立運行於單個或者多個節點的任務連接起來,實現單個任務難以完成的復雜發布流程。
Pipeline 的實現方式是一套 Groovy DSL,任何發布流程都可以表述為一段 Groovy 腳本,並且 Jenkins 支持從代碼庫直接讀取腳本,從而實現了 Pipeline as Code 的理念。
Pipeline 的基本概念和 Jenkinsfile
Pipeline的幾個基本概念
Stage階段:一個 Pipeline 有多個 Stage 組成,每個 Stage 包含一組 Step。注意一個 Stage
可以跨多個 Node 執行,即 Stage 實際上是 Step 的邏輯分組。
Node節點:一個 Node 就是一個 Jenkins 節點,可以是 Master,也可以是 Slave,是 Pipeline
中具體 Step 的運行環境。
Step步驟:是基本的運行單元,可以是創建一個目錄、從代碼庫中 checkout 代碼、執行
一個 shell 命令、構建 Docker 鏡像、將服務發布到 Kubernetes 集群中。Step 由 Jenkins
和 Jenkins 各種插件提供。
stage階段怎么理解,一個Jenkinsfile 可以分為一個大的階段。分為打包、構建、 部署。構建的流程,
可以分為這幾步,獲取源代碼,然后打包,構建,進行編譯,替換配置文件,編譯完打包,進行部署 這個階段就是stage
step步驟 就是具體的操作 編譯里面 先替換配置文件再編譯,替換配置文件就是一步,替換另外一個配置文件就是另外一步 ,具體的一步一步的東西就是
步驟step,是最小的操作單元。就是這個步驟你要干嘛,每個階段都有很多步驟
Jenkinsfile語法
Jenkins Pipeline 支持兩種語法,一種 Declarative Pipeline(聲明式),一種 ScriptedPipeline(腳本式)。
聲明式的 Pipeline 限制用戶使用嚴格的預選定義的結構,是一種聲明
式的編程模型,對比腳本式的 Pipeline 學習起來更加簡單;
腳本式的 Pipeline 限制比較少,結構和語法的限制由 Groovy 本身決定,是一種命令式的編程模型。
所以我們學習使用聲明式的方式編寫 jenkinsfile。
一般來說 jenkinsfile 會被放在代碼庫的根目錄下。
當然也可以在 Web 頁面定義。
下面是兩種不同方式的 jenkinsfile 示例
Jenkinsfile (聲明式)
pipeline { agent any stages { stage('Build') { steps { echo 'Building..' } } stage('Test') { steps { echo 'Testing..' } } stage('Deploy') { steps { echo 'Deploying....' } } } }
前面我們說過,聲明式的Pipeline有嚴格的預定義格式結構,有固定的格式,外層必須是pipeline{},
緊接着是 agent 就是節點node ,agent也是固定的,pipeline緊跟着進來 一定是agent 參考上面的格式 后面的any是任何節點還是其中一個節點,指定某一個節點是自己指定,通過標簽自己來指定節點
指示 Jenkins 分配一個執行器和工作空間來執行下面的 Pipeline,
stages和steps是申明式Jenkinsfile必須的,stages是一個個階段,所有的stage必須要定義在stages里,
stages(‘’) 括號里面是名稱,這個階段是什么名稱,stages這個名稱不能重復,同一個stage名稱只能有一個
每一個stage下的 step 要定義在一個 steps 里,stages里面包含了step,具體的執行步驟都寫在step里面 ,一行一個,可以寫多行
Jenkinsfile( 腳本式 )
node { stage('Build') { // } stage('Test') { // } stage('Deploy') { // } }
在腳本式 jenkinsfile 里,你可以定義一個 node 或者多個 node 塊,然后在 node 塊里
定義你的 stage,在 stage 里定義你的 step 即可