jenkins集羣測試環境原理


Jenkins自動化構建成過程,可幫助咱們節省大量時間,完成這個過程的自動化後,在之後的開發過程當中,咱們須要作的,就是隻是提交代碼到版本庫中,構建自動完成,基本再也不須要人工干預。java

代碼倉庫做爲構建的素材庫,構建所需的代碼從代碼庫中得到。git

最好有一臺服務器單獨做爲持續集成服務器,一方面保證了環境的純淨,一方面不影響開發,並且持續集成服務器通常是隨時準備開始構建的,因此通常也不關機。web

[首先要有統一的代碼庫,服務器不斷從版本控制服務器上檢查代碼狀態,看代碼是否有更新。若是發現有代碼更新,那麼就從版本控制服務器下載最新的代碼。等代碼徹底更新之後,調用自動化編譯腳本,進行代碼編譯。而後運行全部的自動化測試,而且進行代碼分析。若是其中任何一個步驟失敗,就表示build失敗,持續集成服務器會給予響應的反饋。每次代碼提交以後,都會在持續集成服務器上觸發一個定時構建,而後進行編譯、部署。]編程

[原則]vim

1.開發人員必須及時向版本控制庫中提交代碼,也必須常常性地從版本控制庫中更新代碼到本地;瀏覽器

2.須要有專門的集成服務器來執行集成構建。根據項目的具體實際,集成構建能夠被軟件的修改來直接觸發,也能夠定時啓動,如每半個小時構建一次;tomcat

3.必須保證構建的成功。若是構建失敗,修復構建過程當中的錯誤是優先級最高的工做。一旦修復,須要手動啓動一次構建。服務器

4.不更新構建失敗的代碼maven

開發人員及時的提交代碼進行構建是符合上述實踐的,及時拉取代碼能夠防止工做中的分支偏離主幹分支太多。定時觸發構建或者經過檢測代碼的修改狀況在觸發構建都是能夠的,主要是根及時的構建新的代碼。若是構建失敗,則必要及時處理致使失敗的問題,修復後從新構建。固然構建失敗的代碼就不要拉到本地了,會污染一個原本是能夠運行的工做區。分佈式

[持續集成工具]

講了這麼多概念,有沒一種工具把這種實踐實現呢?固然有,常見的持續集成工具以下:

jenkins

travis

gitlab

buddybuild

僅列舉了一些典型的,Jenkins 是傳統型的工具,前身是 Hudson,04 年到如今已經有十多年的歷史,後幾個是最近幾年出現的新一批,多少都和容器技術有點關係,這裏咱們主要介紹 Jenkins,由於這個工具比較經常使用,各類開發實踐均可以經過大量的插件來組合實現,可定製性好不少。

jenkins

1
jenkins是一個開源項目,提供了一種易於使用的持續集成系統,使開發者從繁雜的集成中解脫出來,專一於更爲重要的業務邏輯實現上。同時 Jenkins 能實施監控集成中存在的錯誤,提供詳細的日誌文件和提醒功能,還能用圖表的形式形象地展現項目構建的趨勢和穩定性。— 維基百科

Jenkins 有哪些功能呢?

1.定時拉取代碼並編譯

2.靜態代碼分析

3.定時打包發佈測試版

4.自定義額外的操做,如跑單元測試等

5.出錯提醒

基本上都是持續集成實踐中的要求和周邊的一些實現措施,如提醒功能等,出錯後及時提醒開發者修復,Jenkins 中經過配置 SMTP 配置信息(這個通常的郵件服務提供商都有提供),郵件模板等,建立事件觸發器,在事件(如編譯失敗)發生時,及時發送郵件通知開發者,挺方便的。

Jenkins 有不少種觸發構建的方式,如 webhook,定時更新代碼等,同時能夠在觸發構建後執行自定義的構建操做,經過編輯自定義的構建腳本,幾乎能夠進行任何構建操做。

圖片理解

1)齒輪:若是將java/maven/ant/git/tomcat/jenkins等軟件比喻爲齒輪,以下圖

2)兩個軟件在一塊兒能夠驅動另一個軟件,以下圖

3)若是把這些軟件要集成在一塊兒工做,那麼這個軟件就能夠存在其餘軟件的中間來驅動各個軟件工做,以下圖:

4)jenkins就是相似中間那個齒輪,來驅動其餘軟件的集成一塊兒工做,以下圖

某個博客的理解

[是什麼]

jenkins是一個開源軟件項目,旨在提供一個開放易用的軟件平臺,使得持續集成編程可能。它的前身是hudson,是基於java開發的一種持續集成工具,它能夠根據配置進行持續按期編譯,運行相應的代碼,將運行結果發送至郵件或者展現成報告等。

[爲何]

jenkins做爲持續集成的標誌性工具,天然是有了持續集成的衆多優勢。jenkins能夠作一些自動化的build,只要咱們把jenkins搭建成功,能夠設置幾分鐘build一次,在定時自動build,驗證單元測試,若是發生錯誤則把錯誤報告以email形式發送給項目模塊負責人。

[宏觀理解]

先來張圖,大體理解下宏觀:

詳細介紹:

至於關於郵件的配置,也是爲了方便咱們的開發和管理,jenkins很強大。

講到這裏,仍是「啊呀呀,完蛋,仍是有點不懂「的話,不如直接甩圖(從網上copy下來的)

這裏是選擇Gitlab做爲git server。Gitlab的功能和Github差很少,可是是開源的,能夠用來搭建私有git server,也提供很是強大的web GUI,好比開發者互相review源代碼的時候就會很方便。

系統的工做流程大概分爲如下幾步:

1> 開發者將新版本push到git server (Gitlab)。

2> Gitlab隨後觸發jenkins master結點進行一次build。(經過web hook或者定時檢測)

3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設置好的腳本進行build。這個腳本能夠作的事情不少,好比編譯,測試,生成測試報告等等。這些本來須要手動完成的任務均可以交給jenkins來作。

4> 咱們在build中要進行編譯,這裏使用了分佈式編譯器distcc來加快編譯速度。

notes

jenkins的工做原理是:先將源代碼從gitlab中拷貝一份到本地,而後根據設置的腳本進行build。咱們能夠看出,整個系統的關鍵就是那個build腳本,用來告訴jenkins在一次集成中須要執行的任務。

不過我以後是用的Github做爲git server。但其實差很少,先講到這裏,重點難點仍是在以後jenkins的安裝配置使用上。


Jenkins官網最新穩定版:
https://pkg.jenkins.io/redhat-stable/

1.下載依賴

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

2.導入祕鑰

sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

3.安裝

yum install jenkins #等待安裝時間較長,約25min

1240

jenkins安裝完畢

4.啓動前檢查是否已安裝jdk

java   #顯示java參數即證實已安裝jdk

5.查找jenkins安裝路徑

rpm -ql jenkins

1240

jenkins安裝路徑

jenkins相關目錄釋義:
(1)/usr/lib/jenkins/:jenkins安裝目錄,war包會放在這裏。
( 2 ) /etc/sysconfig/jenkins:jenkins配置文件,「端口」,「JENKINS_HOME」等均可以在這裏配置。
(3)/var/lib/jenkins/:默認的JENKINS_HOME。
(4)/var/log/jenkins/jenkins.log:jenkins日誌文件。

6.配置jenkins
(1)查找jenkins端口

vim /etc/sysconfig/jenkins:set ignorecase/jenkins_port 回車

1240

查找到jenkins端口爲8080

(2)查看其餘端口占用狀況

netstat -ntlp

1240

顯示已被佔用端口

被佔用端口與jenkins端口8080無衝突,便可進入下一步啓動jenkins

(3)啓動jenkins

java -jar /usr/lib/jenkins/jenkins.war --httpPort=8080

(4)修改jenkins端口
若默認8080端口未被佔用,可不修改
若端口已被佔用,則修改端口爲其餘端口,並將對應端口開放

#端口改成8899java -jar /usr/lib/jenkins/jenkins.war --ajp13Port=-1 --httpPort=8899
#啓動java -jar /usr/lib/jenkins/jenkins.war --httpPort=8899

1240

啓動完成

(5)驗證jenkins可否打開
在宿主機瀏覽器輸入http://IP:Port
我這裏輸入:http://192.168.114.128:8080
(修改端口後輸入:http://192.168.114.128:8899)

1240

進入jenkins解密界面

cat /var/lib/jenkins/secrets/initialAdminPassword

1240

獲取密碼

=>獲取密碼=>輸入密碼=>繼續
=>安裝插件=>retry幾回可安裝成功
=>註冊帳號 (記錄好帳號密碼)
=>開始使用Jenkins

1240

getting started

1240

相關文章
相關標籤/搜索