jenkins集群测试环境原理
Jenkins自動(dòng)化構(gòu)建成過程,可幫助我們節(jié)省大量時(shí)間,完成這個(gè)過程的自動(dòng)化后,在以后的開發(fā)過程中,我們需要做的,就是只是提交代碼到版本庫中,構(gòu)建自動(dòng)完成,基本不再需要人工干預(yù)。
代碼倉庫作為構(gòu)建的素材庫,構(gòu)建所需的代碼從代碼庫中獲得。
最好有一臺(tái)服務(wù)器單獨(dú)作為持續(xù)集成服務(wù)器,一方面保證了環(huán)境的純凈,一方面不影響開發(fā),而且持續(xù)集成服務(wù)器一般是隨時(shí)準(zhǔn)備開始構(gòu)建的,所以一般也不關(guān)機(jī)。
[首先要有統(tǒng)一的代碼庫,服務(wù)器不斷從版本控制服務(wù)器上檢查代碼狀態(tài),看代碼是否有更新。如果發(fā)現(xiàn)有代碼更新,那么就從版本控制服務(wù)器下載最新的代碼。等代碼完全更新以后,調(diào)用自動(dòng)化編譯腳本,進(jìn)行代碼編譯。然后運(yùn)行所有的自動(dòng)化測(cè)試,并且進(jìn)行代碼分析。如果其中任何一個(gè)步驟失敗,就表示build失敗,持續(xù)集成服務(wù)器會(huì)給予響應(yīng)的反饋。每次代碼提交之后,都會(huì)在持續(xù)集成服務(wù)器上觸發(fā)一個(gè)定時(shí)構(gòu)建,然后進(jìn)行編譯、部署。]
[原則]
1.開發(fā)人員必須及時(shí)向版本控制庫中提交代碼,也必須經(jīng)常性地從版本控制庫中更新代碼到本地;
2.需要有專門的集成服務(wù)器來執(zhí)行集成構(gòu)建。根據(jù)項(xiàng)目的具體實(shí)際,集成構(gòu)建可以被軟件的修改來直接觸發(fā),也可以定時(shí)啟動(dòng),如每半個(gè)小時(shí)構(gòu)建一次;
3.必須保證構(gòu)建的成功。如果構(gòu)建失敗,修復(fù)構(gòu)建過程中的錯(cuò)誤是優(yōu)先級(jí)最高的工作。一旦修復(fù),需要手動(dòng)啟動(dòng)一次構(gòu)建。
4.不更新構(gòu)建失敗的代碼
開發(fā)人員及時(shí)的提交代碼進(jìn)行構(gòu)建是符合上述實(shí)踐的,及時(shí)拉取代碼可以防止工作中的分支偏離主干分支太多。定時(shí)觸發(fā)構(gòu)建或者通過檢測(cè)代碼的修改情況在觸發(fā)構(gòu)建都是可以的,主要是根及時(shí)的構(gòu)建新的代碼。如果構(gòu)建失敗,則必要及時(shí)處理導(dǎo)致失敗的問題,修復(fù)后重新構(gòu)建。當(dāng)然構(gòu)建失敗的代碼就不要拉到本地了,會(huì)污染一個(gè)本來是可以運(yùn)行的工作區(qū)。
[持續(xù)集成工具]
講了這么多概念,有沒一種工具把這種實(shí)踐實(shí)現(xiàn)呢?當(dāng)然有,常見的持續(xù)集成工具如下:
jenkins
travis
gitlab
buddybuild
僅列舉了一些典型的,Jenkins 是傳統(tǒng)型的工具,前身是 Hudson,04 年到現(xiàn)在已經(jīng)有十多年的歷史,后幾個(gè)是最近幾年出現(xiàn)的新一批,多少都和容器技術(shù)有點(diǎn)關(guān)系,這里我們主要介紹 Jenkins,因?yàn)檫@個(gè)工具比較常用,各種開發(fā)實(shí)踐都可以通過大量的插件來組合實(shí)現(xiàn),可定制性好很多。
jenkins
| 1 | jenkins是一個(gè)開源項(xiàng)目,提供了一種易于使用的持續(xù)集成系統(tǒng),使開發(fā)者從繁雜的集成中解脫出來,專注于更為重要的業(yè)務(wù)邏輯實(shí)現(xiàn)上。同時(shí) Jenkins 能實(shí)施監(jiān)控集成中存在的錯(cuò)誤,提供詳細(xì)的日志文件和提醒功能,還能用圖表的形式形象地展示項(xiàng)目構(gòu)建的趨勢(shì)和穩(wěn)定性?!?維基百科 |
Jenkins 有哪些功能呢?
1.定時(shí)拉取代碼并編譯
2.靜態(tài)代碼分析
3.定時(shí)打包發(fā)布測(cè)試版
4.自定義額外的操作,如跑單元測(cè)試等
5.出錯(cuò)提醒
基本上都是持續(xù)集成實(shí)踐中的要求和周邊的一些實(shí)現(xiàn)措施,如提醒功能等,出錯(cuò)后及時(shí)提醒開發(fā)者修復(fù),Jenkins 中通過配置 SMTP 配置信息(這個(gè)一般的郵件服務(wù)提供商都有提供),郵件模板等,創(chuàng)建事件觸發(fā)器,在事件(如編譯失敗)發(fā)生時(shí),及時(shí)發(fā)送郵件通知開發(fā)者,挺方便的。
Jenkins 有很多種觸發(fā)構(gòu)建的方式,如 webhook,定時(shí)更新代碼等,同時(shí)可以在觸發(fā)構(gòu)建后執(zhí)行自定義的構(gòu)建操作,通過編輯自定義的構(gòu)建腳本,幾乎可以進(jìn)行任何構(gòu)建操作。
圖片理解:
1)齒輪:如果將java/maven/ant/git/tomcat/jenkins等軟件比喻為齒輪,如下圖
2)兩個(gè)軟件在一起可以驅(qū)動(dòng)另外一個(gè)軟件,如下圖
3)如果把這些軟件要集成在一起工作,那么這個(gè)軟件就可以存在其他軟件的中間來驅(qū)動(dòng)各個(gè)軟件工作,如下圖:
4)jenkins就是類似中間那個(gè)齒輪,來驅(qū)動(dòng)其他軟件的集成一起工作,如下圖
某個(gè)博客的理解
[是什么]
jenkins是一個(gè)開源軟件項(xiàng)目,旨在提供一個(gè)開放易用的軟件平臺(tái),使得持續(xù)集成編程可能。它的前身是hudson,是基于java開發(fā)的一種持續(xù)集成工具,它可以根據(jù)配置進(jìn)行持續(xù)定期編譯,運(yùn)行相應(yīng)的代碼,將運(yùn)行結(jié)果發(fā)送至郵件或者展示成報(bào)告等。
[為什么]
jenkins作為持續(xù)集成的標(biāo)志性工具,自然是有了持續(xù)集成的眾多優(yōu)點(diǎn)。jenkins可以做一些自動(dòng)化的build,只要我們把jenkins搭建成功,可以設(shè)置幾分鐘build一次,在定時(shí)自動(dòng)build,驗(yàn)證單元測(cè)試,如果發(fā)生錯(cuò)誤則把錯(cuò)誤報(bào)告以email形式發(fā)送給項(xiàng)目模塊負(fù)責(zé)人。
[宏觀理解]
先來張圖,大致理解下宏觀:
詳細(xì)介紹:
至于關(guān)于郵件的配置,也是為了方便我們的開發(fā)和管理,jenkins很強(qiáng)大。
講到這里,還是“啊呀呀,完蛋,還是有點(diǎn)不懂“的話,不如直接甩圖(從網(wǎng)上copy下來的):
這里是選擇Gitlab作為git server。Gitlab的功能和Github差不多,但是是開源的,可以用來搭建私有g(shù)it server,也提供非常強(qiáng)大的web GUI,比如開發(fā)者互相review源代碼的時(shí)候就會(huì)很方便。
系統(tǒng)的工作流程大概分為以下幾步:
1> 開發(fā)者將新版本push到git server (Gitlab)。
2> Gitlab隨后觸發(fā)jenkins master結(jié)點(diǎn)進(jìn)行一次build。(通過web hook或者定時(shí)檢測(cè))
3> jenkins master結(jié)點(diǎn)將這個(gè)build任務(wù)分配給若干個(gè)注冊(cè)的slave結(jié)點(diǎn)中的一個(gè),這個(gè)slave結(jié)點(diǎn)根據(jù)一個(gè)事先設(shè)置好的腳本進(jìn)行build。這個(gè)腳本可以做的事情很多,比如編譯,測(cè)試,生成測(cè)試報(bào)告等等。這些原本需要手動(dòng)完成的任務(wù)都可以交給jenkins來做。
4> 我們?cè)赽uild中要進(jìn)行編譯,這里使用了分布式編譯器distcc來加快編譯速度。
notes
jenkins的工作原理是:先將源代碼從gitlab中拷貝一份到本地,然后根據(jù)設(shè)置的腳本進(jìn)行build。我們可以看出,整個(gè)系統(tǒng)的關(guān)鍵就是那個(gè)build腳本,用來告訴jenkins在一次集成中需要執(zhí)行的任務(wù)。
不過我之后是用的Github作為git server。但其實(shí)差不多,先講到這里,重點(diǎn)難點(diǎn)還是在之后jenkins的安裝配置使用上。
Jenkins官網(wǎng)最新穩(wěn)定版:
https://pkg.jenkins.io/redhat-stable/
1.下載依賴
sudo?wget?-O?/etc/yum.repos.d/jenkins.repo?https://pkg.jenkins.io/redhat-stable/jenkins.repo2.導(dǎo)入秘鑰
sudo?rpm?--import?https://pkg.jenkins.io/redhat-stable/jenkins.io.key3.安裝
yum?install?jenkins?#等待安裝時(shí)間較長,約25minjenkins安裝完畢
4.啟動(dòng)前檢查是否已安裝jdk
java???#顯示java參數(shù)即證明已安裝jdk5.查找jenkins安裝路徑
rpm?-ql?jenkinsjenkins安裝路徑
jenkins相關(guān)目錄釋義:
(1)/usr/lib/jenkins/:jenkins安裝目錄,war包會(huì)放在這里。
( 2 ) /etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在這里配置。
(3)/var/lib/jenkins/:默認(rèn)的JENKINS_HOME。
(4)/var/log/jenkins/jenkins.log:jenkins日志文件。
6.配置jenkins
(1)查找jenkins端口
查找到j(luò)enkins端口為8080
(2)查看其他端口占用情況
netstat?-ntlp顯示已被占用端口
被占用端口與jenkins端口8080無沖突,即可進(jìn)入下一步啟動(dòng)jenkins
(3)啟動(dòng)jenkins
java?-jar?/usr/lib/jenkins/jenkins.war?--httpPort=8080(4)修改jenkins端口
若默認(rèn)8080端口未被占用,可不修改
若端口已被占用,則修改端口為其他端口,并將對(duì)應(yīng)端口開放
啟動(dòng)完成
(5)驗(yàn)證jenkins能否打開
在宿主機(jī)瀏覽器輸入http://IP:Port
我這里輸入:http://192.168.114.128:8080
(修改端口后輸入:http://192.168.114.128:8899)
進(jìn)入jenkins解密界面
cat?/var/lib/jenkins/secrets/initialAdminPassword獲取密碼
=>獲取密碼=>輸入密碼=>繼續(xù)
=>安裝插件=>retry幾次可安裝成功
=>注冊(cè)賬號(hào) (記錄好賬號(hào)密碼)
=>開始使用Jenkins
getting started
轉(zhuǎn)載于:https://blog.51cto.com/kaile/1956267
總結(jié)
以上是生活随笔為你收集整理的jenkins集群测试环境原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第3章 简单爬虫架构
- 下一篇: DOS命令大全(转)