jenkins2 pipeline介紹

YatHo發表於2017-04-28
什麼是jenkins2的pipeline?
 
jenkins的實現是標準的master/slave模式,使用者與master互動,master將job分佈到slave上執行。
jenkins的基本概念:
1. master, 也就是jenkins的server,是jenkins的核心,主要負責job的定時執行,將job分發到agent執行,和對job執行狀態的監控。
2. agent/slave/node,agent是相對於master的概念,主要作用是監聽master的指令,然後執行job。
3. executor,executor是虛擬的概念,每一個agent都可以設定executor的數量,表示可以同時執行的job的數量。
 
jenkins1的基本用法:
一般使用free style的job型別,在job的裡面呼叫一些指令碼和外掛來實現整個持續整合的過程,一般是將整個job釋出到某臺機器上執行。缺點是job的配置分佈在指令碼和外掛中,配置不夠集中,導致監控的時候log不容易查詢。一般要實現整個持續整合釋出流程需要多個jobs來實現。
 
相對於jenkins1,jenkins2的核心概念是pipeline。在jenkins2中引入grovvy指令碼和虛擬的概念stage使得jenkins的配置和監控更集中,更清楚。
jenkins2的一些新概念:
1. step,其實跟jenkins1中的概念一樣, 是jenkins裡job中的最小單位,可以認為是一個指令碼的呼叫和一個外掛的呼叫。
2. node, 是pipleline裡groovy的一個概念,node可以給定引數用來選擇agent,node裡的steps將會執行在node選擇的agent上。這裡與jenkins1的區別是, job裡可以有多個node,將job的steps按照需求執行在不同的機器上。例如一個job裡有好幾個測試集合需要同時執行在不同的機器上。
3. stage,是pipeline裡groovy裡引入的一個虛擬的概念,是一些step的集合,通過stage我們可以將job的所有steps劃分為不同的stage,使得整個job像管道一樣更容易維護。pipleline還有針對stage改進過的view,使得監控更清楚。

 

pipeline的設計理念是實現基於groovy指令碼,靈活,可擴充套件的持續釋出(CD)工作流。
pipeline的功能和優點:
1. durable永續性:在jenkins的master按計劃和非計劃的重啟後,pipeline的job仍然能夠工作,不受影響。其實理解起來也很簡單,jenkins的master和agent通過ssh連線,如果你知道nohup或disown的話,就可以理解為啥master的重啟不會影響agent上的job繼續執行。之前已經有類似的外掛https://www.cloudbees.com/products/cloudbees-jenkins-platform/enterprise-edition/features/long-running-build-plugin
2. 可暫停性:pipeline基於groovy可以實現job的暫停和等待使用者的輸入或批准然後繼續執行。
3. 更靈活的並行執行,更強的依賴控制,通過groovy指令碼可以實現step,stage間的並行執行,和更復雜的相互依賴關係。
4. 可擴充套件性:通過groovy的程式設計更容易的擴充套件外掛。
 
總之,jenkins2的核心是pipeline,pipeline的核心是groovy,我們必須馬上開始學習groovy。