一、Pipeline介紹
Jenkins2.0中最大的一個特性就是Pipeline,實際使用中Pipeline已經超越了我們對jenkins本身的理解,可能在之前我們大多數把Jenkins當做是一個持續集成的工具。但是在Jenkins2.0中,Jenkins完成了CI到CD的華麗轉身,而且因為Jenkins的開放性,隨着一些測試plugin的加入,CT持續測試也可以在Jenkins Pipeline上實現。以及多節點的組合式任務,使得Jenkins可以實現復雜的發布流程。
Pipeline,簡而言之,就是一套運行於Jenkins上的工作流框架,將原本獨立運行於單個或者多個節點的任務連接起來,實現單個任務難以完成的復雜流程編排與可視化。
官方資料:https://jenkins.io/2.0/
1、Jenkins持續集成架構圖
2、Pipeline的組成部分
①Node
我們可以將Node稱為是節點或者Agent。節點可以執行某一階段(Stage)、某幾階段(Stage)乃至整個Pipeline,就看我們Pipeline中在哪里去定義Node。我們可以將Node作為Jenkins Master的Slave 節點來分擔Master節點的構建以及執行job負載。也可以將Node當做測試、部署的專用節點。比如我們可以增加一個Ansible節點用來做自動化部署,增加 一個Jmeter節點用來做性能測試。
②Stage
我們可以將Stage稱為階段,每一個Stage為Pipeline中的一個小部分,而每個Stage中最小部分為Step。比如一個簡單的持續集成Pipeline。我們可以分為兩個Stage,第一個是git clone code,把最新代碼拉下來,第二個為Build,即利用Ant、Maven等工具進行代碼編譯構建。
③Step
我們可以把Step稱為步驟,一個或者多個Step將會組成一個Stage,Step是Pipeline組成的最小單位。一個Step可以很簡單,比如echo “hello”。也可以很復雜,比如sh‘’ “docker build -t jenkins:master ”。
3、Pipeline兩種語法
Pipeline腳本是由Groovy語言實現
①聲明式Pipeline
pipeline { agent any //定義使用哪個Node進行Job的執行 stages { stage('Build') { //定義Build的stage steps { //定義Build的stage下面的所有step // } } stage('Test') { steps { // } } stage('Deploy') { steps { // } } } }
②腳本式Pipeline
node { //定義使用哪個Node進行Job的執行與聲明式中的Agent等同。 stage('Build') { //定義Build的stage步驟 // //定義Build的stage下面的所有step步驟 } stage('Test') { // } stage('Deploy') { // } }
4、如何寫Pipeline
Jenkins貼心的為我們提供了快速生成腳本的功能
①拉取代碼為例
②生成Pipeline腳本
③Pipeline最佳實踐
通常推薦在 Jenkins中直接從源代碼控制(SCM)中載入Jenkinsfile Pipeline,這樣可以對Jenkinsfile也進行分支管理以及不同版本的管理。
更多Pipeline的使用和說明請參照官方文檔:https://jenkins.io/doc/book/pipeline/