Jenkins 2.0 初體驗:Pipeline 的使用

就在幾天前 Jenkins 2.0 alpha 發佈了。

本來想說 Jenkins 的應用差不多就是這樣,讓我覺得比較新奇的,就是在,Container Summit 2015 參考之前寫的文章,中提到的:

使用 groovy 腳本進行建置流程

jenkins workflow-plugin

https://github.com/jenkinsci/workflow-plugin/blob/master/TUTORIAL.md

這樣的特性,本來想說有空要來試試看,但一直沒有機會,這次看到 jenkins 2.0 已經把它當作預設套件,Well,不應該再繼續忽視,就來玩玩看,也就是因為如此寫了這篇文章。

使用前須知

就如同一開始介紹的,該語言是 groovy 的語法,對於沒有寫過的可能有點陌生,筆者剛好幾年前有用過使用 groovy 的類 rails 框架 Grails,所以對該語言還算有經驗,不過也因為很久沒用了,有些語法糖還需要再熟悉。

對於沒使用過的讀者,把他想做 java 界的動態語言就會比較理解其特性,若對 Javascript 熟悉的朋友相信也不難上手。

想要更進一步的認識 groovy 可以參考 lyhcode 所撰寫的系列文章 Groovy Tutorial,相信會有更多的收穫。

Pipeline

Pipeline 的前身就是 workflow-plugin,所以相關文件都可以參考 workflow-plugin,唯網路上的文件還是有點少,有些地方需要自己在踩踩看,感受一下相關的使用情境。

基本上 Pipeline 就是把建置流程使用 DSL(Domain-Specific Languages) 進行抽象化,讓相關領域操作能夠提高可讀性,並且更容易操作。

Jnkins 2.0

話不多說,就來安裝 Jnkins 2.0,下面是剛安裝好的初始畫面,若點選預裝 Plugin 就會聯同 Pipeline 一併安裝。

安裝完成後,我們就可以新建一個 task 可以看到就有 Pipeline 的選項可以進行操作。

新的介面好看許多,之前落落長的設定畫面也用 Tab 將其分類清楚,如此就可以根據需求點選所許的建置方式。

此次要做的當然就是 Pipeline 這個主角,在這邊就以 Node.js 為例,來進行到建置完成,下面是 Pipeline 的 sample Groovy script,也是我人生第一個 Pipeline Task :)

node {  
   // Mark the code checkout 'stage'....
   def nvmSource = '. ~/.bashrc && '
   stage 'Checkout'

   // Get some code from a GitHub repository
   git url: 'https://github.com/TrunkWorkshop/sailsSample.git'

   stage 'check'
   sh "${nvmSource} node -v && npm -v"

   stage 'Build'
   sh "${nvmSource} npm i"
}

其實應該也不太需要解釋 :D,因為 DSL 的特性在語意上就已經非常的清楚。

第一步使用變數 nvmSource 將 nvm source 指令宣告完成,以便往後執行相關建置時有 node 可以使用。

第二步使用 git url checkout,這邊就不需要再透過 Jenkins 的 UI 來定義。

第三步 check 檢查相關 environment 是否正確,可以看到 "${nvmSource} node -v && npm -v" 就是 Groovy 的語法糖,可以將變數直接再 string 中使用,相關其他語法可以參考 Strings

環境 ready 了以後,後續就可以通行無阻了,最後面再用 npm i 來將相關套件完成,執行畫面如下:

結論

目前 Jenkins 2.0 還在 alpha 階段,嚐鮮的話還可以,若要用於正式環境,還是建議大家可以先試用看看,就筆者而言也算是使用不到 1 小時,所以或許有些什麼雷還沒有踩到,不過若是熟習 CI 流程的話,在使用上應該也不會太難才是,畢竟概念大同小異,只是用不同的方式完成而已。

Pipeline 這樣的 CI 流程,就我來看比傳統使用 UI 設置的方式來說,門檻較高,但也有其優點,其實就是整個 CI flow 可讀性更高,且更容易進行板控,再檢視 CI flow 時也可以不用每個 Task 一個一個釐清,一個檔案就可以一目了然。

另外可以想到的,若搭配 Docker 想必相得益彰 :),雖然還沒有真的搭配 Docker 使用,不過光想想就覺得很方便呢!

看來相關的 Jenkins 跟 Docker 教材也要在與時俱進一下了!

相關課程可以密切注意創科資訊的粉絲專頁。