超詳細的jenkins持續(xù)集成工作原理、功能、部署方式等介紹
今天簡單整理了一下jenkins的一些概念性內(nèi)容,歸納如下:
1. 概念
jenkins是一個開源項目,提供了一種易于使用的持續(xù)集成系統(tǒng),使開發(fā)者從繁雜的集成中解脫出來,專注于更為重要的業(yè)務(wù)邏輯實現(xiàn)上。同時 Jenkins 能實時監(jiān)控集成中存在的錯誤,提供詳細的日志文件和提醒功能,還能用圖表的形式形象地展示項目構(gòu)建的趨勢和穩(wěn)定性。
Jenkins可以構(gòu)建一個自動化的持續(xù)集成環(huán)境可以使用它來“自動化”編譯、打包、分發(fā)部署應(yīng)用,它兼容ant、maven、gradle等多種第三方構(gòu)建工具,同時與svn、git能無縫集成,也支持直接與知名源代碼托管網(wǎng)站,如github、bitbucket直接集成。
2. Jenkins的功能
- 定時拉取代碼并編譯
- 靜態(tài)代碼分析
- 定時打包發(fā)布測試版
- 自定義操作,如跑單元測試等
- 出錯提醒
3. 原理
這里是選擇Gitlab作為git server。Gitlab的功能和Github差不多,但是是開源的,可以用來搭建私有g(shù)it server,也提供非常強大的web GUI,比如開發(fā)者互相review源代碼的時候就會很方便。系統(tǒng)的工作流程大概分為以下幾步:
- 開發(fā)者將新版本push到git server (Gitlab)。
- Gitlab隨后觸發(fā)jenkins master結(jié)點進行一次build。(通過web hook或者定時檢測)
- jenkins master結(jié)點將這個build任務(wù)分配給若干個注冊的slave結(jié)點中的一個,這個slave結(jié)點根據(jù)一個事先設(shè)置好的腳本進行build。這個腳本可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務(wù)都可以交給jenkins來做。
- 我們在build中要進行編譯,這里使用了分布式編譯器distcc來加快編譯速度。
jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地,然后根據(jù)設(shè)置的腳本進行build。我們可以看出,整個系統(tǒng)的關(guān)鍵就是那個build腳本,用來告訴jenkins在一次集成中需要執(zhí)行的任務(wù)。
不過我之后是用的Github作為git server。但其實差不多。
4. 部署方式
(1) jenkins觸發(fā)式構(gòu)建:
用于開發(fā)環(huán)境部署,開發(fā)人員push代碼或者合并代碼到gitlab項目的master分支,jenkins就部署代碼到對應(yīng)服務(wù)器。
(2) jenkins參數(shù)化構(gòu)建:
用于測試環(huán)境預(yù)上線環(huán)境部署,開發(fā)push代碼或者合并代碼到gitlab項目的master分支之后,并不會部署代碼,而是需要登錄到j(luò)enkins的web界面,點擊構(gòu)建按鈕,傳入對應(yīng)的參數(shù)(比如參數(shù)需要構(gòu)建的tag,需要部署的分支)然后才會部署。
(3) jenkins定時構(gòu)建:
用于APP自動打包,定時構(gòu)建是在參數(shù)化構(gòu)建的基礎(chǔ)上添加的,開發(fā)人員可以登錄jenkins手動傳入tag進行打包,如果不手動打包,那么jenkins就每天凌晨從gitlab拉取最新的APP代碼打包。
5. 持續(xù)集成的分類
- 持續(xù)集成:指程序員在代碼的開發(fā)工程中,可以頻繁的將代碼部署到主干上,并進行自動化測試
- 持續(xù)交互:指在持續(xù)集成的基礎(chǔ)之上,將代碼部署到線上測試環(huán)境
- 持續(xù)部署:指在持續(xù)交互的基礎(chǔ)之上,將要部署的代碼實現(xiàn)自動部署,包括持續(xù)交互、持續(xù)部署