1. 程式人生 > >Jenkins高階篇之Pipeline-1-Pipeline基本介紹

Jenkins高階篇之Pipeline-1-Pipeline基本介紹

這篇是Pipeline學習的Hello World篇,任何新知識開始學習都比較困難。耐心一點,堅持多看一些官網文件。概念積累多了,我們才能運用和嘗試一些具體的實戰練習。這篇主要介紹,Pipeline的基本概念,包括,什麼是Pipeline, Pipeline指令碼型別劃分,為什麼要選擇Pipeline,以及Pipeline一些大的概念,細節的知識,我們後續文章會慢慢學習。

 

1. 官網文章

我會參考官網文章進行翻譯和補充,官網是權威文件,請以官網為準。

https://jenkins.io/doc/book/pipeline/

 

2. 什麼是Pipeline

        Jenkins Pipeline是一組外掛,支援在Jenkins上實現和整合持續交付的管道。Pipeline這個單詞是水管的意思。我以後可能會翻譯成管道或者流水線,我建議大家不要翻譯,就寫Pipeline。這裡持續整合(CI)和持續交付(CD),我們在DevOps基礎掃盲篇介紹過,以後多經常用到這兩個單詞縮寫。

        Jenkins為了更好支援CI和CD,通過Groovy語言這麼DSL(動態描述語言)來開發Pipeline元件。在Jenkins中有一句話,Pipeline as code,Pipeline是Jenkins中最優雅的存在。之前Jenkins上UI操作動作,都可以在Pipeline中程式碼實現,主要你對Jenkins和Groovy語言有足夠多掌握。

        以後我們經常說CI Pipeline和CD Pipeline,你現在大致可以理解為,要實現CD,先要實現CI。CD Pipeline就是一個程式碼檔案,裡面把你專案業務場景都通過Groovy程式碼和Pipeline語法實現,一個一個業務串聯起來,全部實現自動化,從程式碼倉庫到生產環境完成部署的自動化流水線。這個過程就是一個典型的CD Pipeline

       官網建議我們把Pipeline程式碼放在一個名稱為Jenkinsfile的文字檔案中,並且把這個檔案放在你專案程式碼的根目錄,採用版本管理工具管理。Jenkinsfile我後面會具體例子來介紹。當然,我們也可以把Pipeline程式碼用一個Hello.groovy這樣的檔案去儲存在程式碼庫,這也是沒問題的。

 

3. Pipeline程式碼分類和兩者區別

        一個Jenkinsfile或者一個Pipeline程式碼檔案,我們可以使用兩個指令碼模式去寫程式碼,這兩種分類叫:Declarative Pipeline 和 Scripted Pipeline. 現在來介紹下兩者指令碼模式的區別,Declarative相對於Scripted有兩個優點。第一個是提供更豐富的語法功能,第二個是寫出來的指令碼可讀性和維護性更好。接下里我們學習的Pipeline語法,其中一部分語法只能在Declarative模式下使用,並不支援Scripted模式。雖然,我在後面文章也會用Declarative和Script兩個模式去寫同一個場景的Pipeline程式碼,但是,作為一個初學者,我建議選擇並採用Declarative的方式去組織Pipeline程式碼。

 

4. 為什麼要選擇使用Pipeline

        現在Jenkins是一個非常著名的CI伺服器平臺,支援很多不同第三方(外掛的形式)整合自動化測試。Jenkins UI 配置已經滿足不了這麼複雜的自動化需求,加入Pipeline功能之後,Jenkins 表現更強大,Pipeline主要有一下特點。

程式碼:Pipeline是用程式碼去實現,並且支援check in到程式碼倉庫,這樣專案團隊人員就可以修改,更新Pipeline指令碼程式碼,支援程式碼迭代。

耐用:Pipeline支援在Jenkins master(主節點)上計劃之內或計劃外的重啟下也能使用。

可暫停:Pipeline支援可選的停止和恢復或者等待批准之後再跑Pipeline程式碼。

豐富功能:Pipeline支援複雜和實時的CD需求,包括迴圈,拉取程式碼,和並行執行的能力。

可擴充套件性:Pipeline支援DSL的自定義外掛擴充套件和支援和其他外掛的整合。

      上面這段話提到的“主節點”,“批准” 我會後續用具體例子介紹,幫你理解這裡說到的好處。這個可擴充套件性,可能我沒法實現,暫時沒有研究這麼深入。在第節點裡面提到的CD Pipeline和本節點提到的Pipeline可以新增到程式碼倉庫管理,通過下面這個CD Pipeline的流程圖,我們知道一個CD流程大致包含這些業務場景。

  1. 開發提交程式碼到專案倉庫伺服器
  2. 開始執行Pipeline程式碼檔案,開始從倉庫check out程式碼
  3. 啟動Pipeline裡面第一個stage,stage就是階段的意思,後面會介紹語法
  4. 圖裡面第一個Stage應該是程式碼打包構建(Build)
  5. 然後進入測試的階段,執行各種自動化測試驗證
  6. 然後測試結束,到運維的部署階段。
  7. 部署結束,輸出報告,整個自動化流程工作完成,等待觸發構建,開始重複下一輪1到7步驟。

 

5. Pipeline的大的一些概念基礎

這裡開始介紹一些大的並且很基礎的概念,更多、更具體的Pipeline語法,我後續文章來介紹。

pipeline

       這個單詞是小寫,可以看作是Pipeline語法中的一個關鍵字。以後一個groovy檔案或者一個Jenkinsfile檔案中不光只有Pipeline程式碼,例如還有其他的工具類方法等。通過pipeline { Pipeline程式碼},這個關鍵字就是告訴Jenkins接下來{}中的程式碼就是pipeline程式碼,和普通的函式或者方法隔離出來。

node

       關鍵字node就是用來區分,Jenkins環境中不同的節點環境。例如一個Jenkins環境包括master節點,也就是主節點,還包括N多個從節點,這些從節點在新增到主節點的嚮導頁面中有一個引數,好像是label,就是給這個從節點取一個名稱。在Pipeline程式碼中可以通過node這個關鍵字告訴Jenkins去用哪一臺節點機器去執行程式碼。

stage

       關鍵字stage,就是一段程式碼塊,一般個stage包含一個業務場景的自動化,例如build是一個stage, test是第二個stage,deploy是第三個stage。通過stage隔離,讓Pipeline程式碼讀寫非常直觀。到後面你還會學習stages這個關鍵字,一個stages包含多個stage。

step

       關鍵字step就是一個簡單步驟,一般就是幾行程式碼或者呼叫外部一個模組類的具體功能。這裡step是寫在stage的大括號裡的。

       以上就是Pipeline的基礎語法內容,下一篇,介紹Declarative Pipeline 和 Scripted Pipeline在Jenkins環境上的實戰練習,並解釋沒一行程式碼的含義,順便複習一下Pipeline的基礎語法,也就是pipeline, node, stage, step這幾個關鍵字的使用。