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。