2、multibranch pipeline介紹及實現構想
一、簡單介紹:
A、先介紹下什麼是Jenkins 2.0,Jenkins 2.0的精髓是 Pipeline as Code,是幫助Jenkins實現CI到CD轉變的重要角色。什麼是Pipeline,簡單來講,就是一套運行於Jenkins上的工做流框架,將本來獨立運行於單個或者多個節點的任務鏈接起來,實現單個任務難以完成的複雜發佈流程。Pipeline的實現方式是一套Groovy DSL,任何發佈流程均可以表述爲一段Groovy腳本,而且Jenkins支持從代碼庫直接讀取腳本,從而實現了Pipeline as Code的理念。
B、multiBranch Pipeline的使用首先須要在每一個分支代碼的根目錄下存放Jenkinsfile(Pipeline的定義文件),咱們能夠理解下maven的pom.xml文件,Jenkinsfile做爲pipeline的管理文件也須要在源代碼中進行直接的配置管理。這就要求devops工程師(QA、運維等)首先要有代碼庫的權限,或者至少賦能給dev工程師jenkinsfile的設計能力。
二、Groovy DSL定義了測試環境發佈的全部步驟,包括:合併master分支,選擇配置文件與替換,編譯構建,上傳構建後的應用包文件,部署應用;
三、上傳包文件有惟一的shell腳本,不一樣測試環境的不一樣應用的包對應上傳到包文件中轉主機上不一樣的路徑;
四、部署應用,都使用ansible的playbook劇本控制,java應用包括結束進程,替換應用包,重啓應用。靜態頁面只須要替換。因爲各個應用的部署方式差異較大,全部暫時每一個應用都有單獨ansible劇本,部署到不一樣環境參數有不一樣變量;
五、Groovy DSL流程固定,將其中變量做爲參數列出來,再增長新的應用須要發佈的時候,直接用模板,只須要修改變量參數便可使用;
六、Jenkinsfile保存在gitlab中項目代碼的master分支根目錄,不會丟失,不會被篡改,對Jenkins服務器依賴小不須要額外備份;
七、每一個應用只須要配置一個Jenkins的項目便可部署到多個環境,其中實現選擇功能,使用"Extended Choice Parameter"插件;
八、發佈不一樣的分支直接選擇便可;
九、每套環境有多臺主機,ansible的劇本根據各個主機上是否有次應用的目錄來肯定是否將應用部署到主機上,不須要配置的時候指定主機;
十、使用cksum進行CRC校驗;
十一、打印出部署的java應用的進程ID。
3、總體拓撲結構
javascript
4、發佈過程涉及到的步驟
一、合併master分支代碼;
二、替換不一樣環境的配置文件;
三、編譯構建;
四、上傳編譯的包文件到linux主機;
五、結束應用的舊進程,替換包文件,重啓應用。java
5、Groovy DSL實現linux
一、Jenkins pipeline的代碼實現,先將全部的變量都單獨抽取出來,使用腳本編程方式。由於有合併master分支到測試分支的須要,因此得獲取到Jenkins項目的環境變量:gitlab URL和分支名字;選擇環境的變量使用"Extended Choice Parameter"插件;git
二、合併master分支而且提交shell
三、替換配置文件,這裏須要判斷提供的路徑指向的是目錄仍是文件編程
四、maven構建tomcat
五、上傳構建完成後生產的包,調用shell腳本,其中包的相對路徑、Jenkins的job名字和部署到的環境爲三個參數變量服務器
六、部署,須要三個參數,分佈是Jenkins的job名字,部署到的環境,以及部署此java應用的ansible playbook劇本的絕對路徑,由於劇本保存在Jenkins的主機上。框架
6、上傳腳本運維
Shell腳本作了三件事:
7、ansible部署劇本
一、判讀是否存在此應用的路徑,記錄結果,忽略報錯
二、kill此應用的進程,若是步驟1的判斷結果result是succeeded的時候
三、刪掉舊的包文件,因爲此處部署測試環境,無需備份保留,能夠直接刪除,條件也是步驟1的判斷結果result是succeeded
四、從包中起色器下載包文件,條件也是步驟1的判斷結果result是succeeded
五、cksum進行CRC校驗
六、從新啓動應用,捕獲報錯信息
七、返回進程ID
注意:
上傳包的shell腳本和部署應用的ansible劇本中,不少命名都是統一了方式。
8、Jenkins配置job
一、新建multibranch pipeline項目
二、配置gitlab地址
三、構建配置
四、配置完畢以後保存,而後掃描分支
五、掃描出來分支,點進去,構建,這裏會顯示全部的變量
六、在控制檯的輸出中,能看到CRC校驗值以及進程ID