利用Jenkins生成maven項目鏡像及容器
1、Jenkins是什麼
目前持續集成(CI)已成為當前許多軟體開發團隊在整個軟體開發生命周期內側重於保證代碼質量的常見做法。它是一種實踐,旨在緩和和穩固軟體的構建過程。並且能夠幫助您的開發團隊應對如下
挑戰:
軟體構建自動化:配置完成後,CI系統會依照預先制定的時間表,或者針對某一特定事件,對目標軟體進行構建。
構建可持續的自動化檢查:CI系統能持續地獲取新增或修改後簽入的源代碼,也就是說,當軟體開發團隊需要周期性的檢查新增或修改後的代碼時,CI系統會不斷確認這些新代碼是否破壞了原有軟體的成功構建。這減少了開發者們在檢查彼此相互依存的代碼中變化情況需要花費的時間和精力。
構建可持續的自動化測試:構建檢查的擴展部分,構建后執行預先制定的一套測試規則,完成後觸發通知(Email,RSS等等)給相關的當事人。
Advertisements
生成后後續過程的自動化:當自動化檢查和測試成功完成,軟體構建的周期中可能也需要一些額外的任務,諸如生成文檔、打包軟體、部署構件到一個運行環境或者軟體倉庫。這樣,構件才能更迅速地提供給用戶使用。
Jenkins是一個可擴展的持續集成引擎。主要用於:持續、自動地構建/測試軟體項目以及監控一些定時執行的任務。其擁有的特性包括:
1 . 易於安裝-只要把jenkins.war部署到servlet容器,不需要資料庫支持。
2 . 易於配置-所有配置都是通過其提供的web界面實現。
3 . 集成RSS/E-mail通過RSS發布構建結果或當構建完成時通過e-mail通知。
4 . 生成JUnit/TestNG測試報告。
Advertisements
5 . 分散式構建支持Jenkins能夠讓多台計算機一起構建/測試。
6 . 文件識別:Jenkins能夠跟蹤哪次構建生成哪些jar,哪次構建使用哪個版本的jar等。
7 . 插件支持:支持擴展插件,你可以開發適合自己團隊使用的工具。
該系統的各個組成部分是按如下順序來發揮作用的:
1 . 開發者檢入代碼到源代碼倉庫。
2 . CI系統會為每一個項目創建了一個單獨的工作區。當預設或請求一次新的構建時,它將把源代碼倉庫的源碼存放到對應的工作區。
3 . CI系統會在對應的工作區內執行構建過程。
4 . (配置如果存在)構建完成後,CI系統會在一個新的構件中執行定義的一套測試。完成後觸發通知(Email,RSS等等)給相關的當事人。
5 . (配置如果存在)如果構建成功,這個構件會被打包並轉移到一個部署目標(如應用伺服器)或存儲為軟體倉庫中的一個新版本。軟體倉庫可以是CI系統的一部分,也可以是一個外部的倉庫,諸如一個文件伺服器或者像Java.net、 SourceForge之類的網站。
6 . CI系統通常會根據請求發起相應的操作,諸如即時構建、生成報告,或者檢索一些構建好的構件。
2、Jenkins的安裝與部署
1 . 下載yum源:
sudo wget -O/etc/yum.repos.d/jenkins.repo \https://pkg.jenkins.io/redhat-stable/jenkins.repo
2 . 導入密鑰:sudo rpm --importhttps://pkg.jenkins.io/redhat-stable/jenkins.io.key
3 . 安裝Jenkins:yum install jenkins
4 . 啟動前檢查是否安裝jdk:java -version(最好是1.8以上的)
5 .修改配置文件:sudo vim /etc/init.d/jenkins
在candidates="路徑后添加java路徑/usr/java/jdk1.8.0_144/bin/java.(根據個人Java安裝地址)
vi /etc/sysconfig/jenkins
找到JENKINS_PORT=「8080」(8080是Jenkins默認埠,若被佔用課修改為其他空閑埠)
6 . 關閉防火牆
7 . 啟動應用:sudo service jenkins start
3、Jenkins構建maven項目
1、插件安裝
啟動Jenkins服務以後便可登錄瀏覽器訪問,因為我們需要從git上拉取源碼,所以要在Jenkins上安裝相應的git插件,同時我們也需要安裝maven類的插件來支持構建maven項目。
--》點擊系統管理
--》點擊管理插件
在可選插件中找到Git plugin和Maven Integration plugin相關插件並安裝插件安裝完畢后重啟Jenkins
2、新建maven項目
新建一個job
輸入名稱和項目類型
源碼管理
在源碼管理項中選擇git並輸入git地址並在Credentials中Add倉庫登錄賬號密碼,在下方分支選擇中選擇需要構建的項目分支
構建觸發器
根據實際要求構建符合要求的觸發器,此圖中觸發器Poll SCM的功能是每個一定時間便檢查源碼是否有更新,若有則自動構建。(*/60****含義是每隔60分鐘檢查一次git源碼)
構建選項
第一行選項是默認的pom文件在git的root目錄下,如果pom文件在其他路徑下,則需要輸入相應的路徑/pom.xml;第二行執行的maven命令
此時maven項目構建基本就完成,進入將maven項目生成docker鏡像的步驟。
4、Docker鏡像構建
1、docker配置
在Jenkins中安裝相應的docker插件(docker-build-step)
在Host伺服器上安裝docker(1.12.6版本慎用)
配置docker的遠程訪問:
centos下修改docker的配置文件/usr/lib/systemd/system/docker.service
在[Service]的部分添加(此處是暴露的6732埠)
ExecStart=
ExecStart=/usr/bin/dockerd -Htcp://0.0.0.0:6732 -H unix://var/run/docker.sock
docker重新讀取配置文件並重啟docker服務
# systemct ldaemon-reload
# systemctl restartdocker
進入Jenkins,選擇系統管理--》系統設置--》Docker Builder
在Docker URL處填寫暴露的埠tcp://10.10.184.150:6732然後保存
這樣Jenkins便可調用host伺服器中的docker功能
2、創建Docker鏡像
執行腳本構建容器和鏡像:在上一步構建war包之後繼續選擇POSTSteps,執行我們放在Jenkins宿主機上/home/skyform/目錄下的構建腳本
保存後進入操作頁面並點擊立即構建
此時左下角會出現構建進度條,藍色表示構建成功,紅色表示構建失敗,灰色表示構建未完成
構建結束後點擊構建編號,進入結果查看界面,點擊Console Output查看構建過程
這樣就完成了利用Jenkins來夠構建一個maven項目並將其製作成Docker鏡像的工作。這個構建過程會根據你的觸發器設置來不斷實施,從而達到監控軟體開發流程,快速顯示問題與部署的目的。保證開發人員以及相關人員省時省力提高開發效率。
5、案例
目前SkyForm產品在進行微服務化改造,我們採用jenkins+docker支撐了SkyForm產品各個微服務的開發、部署、測試的整個過程
SkyForm產品中間件docker化:
SkyForm產品微服務docker化(19個):
SkyForm5.0微服務通過Jenkins實現持續集成及構建架構:
研發人員將自己的代碼提交至git倉庫,Jenkins響應設定的觸發器,將提交后的代碼拉取、編譯、打包至Jenkins宿主機上,然後執行腳本,通過Docker命令在開發環境(或測試環境)生成響應鏡像並啟動容器,研發人員此時即可在開發環境(或測試環境)下進行聯調。