Jenkins你還不會玩,打臉不!
- 2019 年 10 月 4 日
- 筆記

jenkins是基於java開發的一種持續集成工具,用於監控持續重複的工作,功能包括。
1.持續的軟件版本發佈/測試
2.監控外部調用執行項目
Jenkins其實很早之前就有了,最近火起來的原因是,大家都在關注devops,關注如何來做持續集成,持續交付,如何來做CI/CD。Jenkins作為持續集成的工具,他其實只是一個平台或者是一個大的框架,它的工作完全就是依靠插件,也就是說你想使用什麼功能,你就找到什麼樣的插件。
優點:
1.採用shell自定義腳本,控制集成部署環境更加方便靈活
2.精簡war包中的lib包,常駐tomcat里,減少war包傳輸時間
3.Jenkins 用戶權限管理,不讓淘氣鬼亂動
4.構建失敗發郵件通知相關人員解決
5.自動按天備份war包,Jenkins配置備份以及版本控制化
Jenkins安裝
Jenkins的安裝十分簡單,你可以從官網http://mirrors.jenkins-ci.org/war/latest/ 直接下載war包,使用java -jar jenkins.war,或者放到Tomcat類似的容器里運行都可以(JDK版本建議使用1.6以上來運行)。Jenkins默認啟動端口是8080,請注意端口佔用。另外,Jenkins文件其實都在~/.jenkins目錄下,運行過程中你可以在這裡找到你運行過的job和相應的日誌文件。
首次安裝,可以把插件都安裝上,自己都試試看。如果因為網絡原因,插件下載失敗的,可以從失敗詳情中把地址拷出來,下載後,以上傳hpi文件的方式安裝。
系統設置
安裝完成的第一步,先到Blobal Tool Configuration中配置相關的環境,如JDK、MAVEN、GIT等,相應的路徑設置都是設置Jenkins這台機子本地的目錄。建議把所有的配置都完善下,否則日後的運行中可能會出現一些小問題,可以試下點擊?查看幫助,還是很有用的。
Jenkins集群配置
集群配置也十分簡單,就是添加slave節點的過程。點擊系統管理->管理節點->新建節點,各個配置後面都有詳細的幫助說明的。
在啟動方法這裡推薦使用 Launch slave agents>構建Job
其實到這一步,就是jenkins的常規流程了,你可以參照創建Job選項的界面的各個配置,制定你構建計劃,或者我們直接使用腳本來完成我們的構建操作(建議)選擇構建Execute shell,文章末尾會附上一個完整項目的shell構建流程。
Pipeline
Pipeline字面意思就是流水線,很好用的Jenkins的一個插件,將很多步驟按順序排列好,做完一個執行下一個。真實的工作環境有很多job,比如先編譯,然後執行靜態代碼檢查、單元測試、然後部署服務器、服務器重啟、進行ui測試等。我們需要對這些job進行一些設置將它們的上下游關係配置好。
這時候Pipeline就派上用場了。在Jenkins主頁點擊新建視圖,然後選擇Build Pipeline View,然後填寫Select Initial Job,構建後的操作可以選擇其他的Job,以此類推,這樣一個流水線就完成了。Pipeline提供視圖界面,你可以在視圖上形象地看到整個構建計劃的執行流程和完成度。
Jenkins是一個強大的CI工具,雖然本身使用Java開發,但也能用來做其他語言開發的項目CI。下面講解如何使用Jenkins創建一個構建任務。
登錄Jenkins, 點擊左側的新建,創建新的構建任務。

跳轉到如下界面。任務名稱可以自行設定,但需要全局唯一。輸入名稱後選擇構建一個自由風格的軟件項目(其他選項不作介紹)。並點擊下方的確定按鈕即創建了一個構建任務。之後會自動跳轉到該job的配置頁面。

新建自由風格的軟件項目
下圖是構建任務設置界面,可以看到上方的幾個選項"General", "源碼管理", "構建觸發器","構建環境", "構建", "構建後操作"。下面逐一介紹。

General
General是構建任務的一些基本配置。名稱,描述之類的。

General
項目名稱: 是剛才創建構建任務步驟設置的,當然在這裡也可以更改。
描述: 對構建任務的描述。
丟棄舊的構建:服務器資源是有限的,有時候保存了太多的歷史構建,會導致
Jenkins速度變慢,並且服務器硬盤資源也會被佔滿。當然下方的"保持構建天數" 和 保持構建的最大個數是可以自定義的,需要根據實際情況確定一個合理的值。
其他幾個選項在這裡不做介紹,有興趣的可以查看Jenkins"幫助信息", 會有一個大概的介紹。不過這些"幫助信息"都是英文的。

點擊右方的這些"問號"查看"幫助信息"
源碼管理
源碼管理就是配置你代碼的存放位置。

源碼管理
Git: 支持主流的github 和gitlab代碼倉庫。因我們的研發團隊使用的是gitlab,所以下面我只會對該項進行介紹。
Repository URL:倉庫地址
Credentials:憑證。可以使用HTTP方式的用戶名密碼,也可以是RSA文件。但要通過後面的"ADD"按鈕添加憑證。
Branches to build:構建的分支。*/master表示master分支,也可以設置為其他分支。
源碼瀏覽器:你所使用的代碼倉庫管理工具,如github, gitlab.
URL:填入上方的倉庫地址即可。
Version: 8.7 這個是我們gitlab服務器的版本。
Subversion:就是SVN,這裡不作介紹。
構建觸發器
構建觸發器,顧名思義,就是構建任務的觸發器。

觸發遠程構建(例如,使用腳本): 該選項會提供一個接口,可以用來在代碼層面觸發構建。這裡不做介紹,後期可能會用到。
Build after other projects are built:該選項意思是"在其他projects構建後構建"。這裡不作介紹,後期可能會用到該選項。
Build periodically:周期性的構建。很好理解,就是每隔一段時間進行構建。日程表類似
linux crontab書寫格式。如下圖的設置,表示每隔30分鐘進行一次構建。

周期構建
Build when a change is pushed to GitLab:當有更改push到gitlab代碼倉庫,即觸發構建。後面會有一個觸發構建的地址,一般被稱為webhooks。需要將這個地址配置到gitlab中,webhooks如何配置後面介紹。這個是常用的構建觸發器。
Poll SCM:該選項是配合上面這個選項使用的。當代碼倉庫發生改動,jenkins並不知道。需要配置這個選項,周期性的去檢查代碼倉庫是否發生改動。

十分鐘檢查一次

構建環境中的構建工具
With Ant:選擇這個工具,並指定ant版本和jdk版本。這兩個工具的版本我都事先在服務器上安裝,並且在jenkins全局工具中配置好了。
其他選項不作介紹,同樣可以查看"幫助信息" 獲得使用幫助。
5.構建
選擇下方的增加構建步驟。

增加構建步驟
可以選擇的項很多。這裡就介紹"Invoke Ant" 和"Execute shell".
Eexcute shell:執行shell命令,該工具是針對linux環境的,windows環境也有對應的工具"Execute Windows batch command"。
在構建之前,可能我們需要執行一些命令,比如壓縮包的解壓之類的。為了演示,我就簡單的執行 "echo $RANDOM" 這樣的linux shell下生產隨機數命令。
Invoke Ant:Ant是一款java項目構建工具,當然也能用來構建php。

Ant Version:選擇Ant版本。這個ant版本是安裝在jenkins服務器上的版本,並且需要在jenkins"系統工具"中設置好。
Targets:要執行的操作,一行一個操作任務。以上圖為例,build是構建,tar是打包。
Build File: 是Ant構建的配置文件,如果不指定,則是在項目路徑下的workspace目錄中的build.xml。build.xml文件具體怎麼配置,後面再細講。
properties: 設定一些變量,這些變量可以在build.xml 中被引用。
Send files or execute commands over SSH:發送文件到遠程主機或執行命令(腳本)

Name: SSH Server的名稱。SSH Server可以在jenkins-系統設置中配置。
source files: 需要發送給遠程主機的源文件。
Remove prefix: 移除前面的路徑。如果不設置這個參數,則遠程主機會自動創建構建源 source files 包含的那個路徑。
Remote directory: 遠程主機目錄。
Exec command:在遠程主機上執行的命令,或者執行的腳本。
6.構建後操作
構建後操作,就是對project構建完成後的一些後續操作,比如生成相應的代碼測試報告。

郵件通知
Publish Clover PHP Coverage Report:發佈代碼覆蓋率xml格式的文件報告。路徑會在"build.xml"文件中定義
Publish HTML reports:發佈代碼覆蓋率的HTML報告。
Report Crap: 發佈crap報告。
E-mail Notification: 郵件通知,構建完成後發郵件到指定的郵箱。
以上配置完成後,點擊保存。