利用Jenkins生成maven項(xiàng)目鏡像及容器_第1頁(yè)
利用Jenkins生成maven項(xiàng)目鏡像及容器_第2頁(yè)
利用Jenkins生成maven項(xiàng)目鏡像及容器_第3頁(yè)
利用Jenkins生成maven項(xiàng)目鏡像及容器_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

-.z.利用Jenkins生成maven項(xiàng)目鏡像及容器導(dǎo)讀:本文根據(jù)天云軟件研發(fā)工程師12月28日在Dockone技術(shù)社區(qū)的分享整理而成,文章結(jié)尾處有社區(qū)問(wèn)答具體容。以下是分享詳情:一、Jenkins是什么目前持續(xù)集成(CI)已成為當(dāng)前許多軟件開(kāi)發(fā)團(tuán)隊(duì)在整個(gè)軟件開(kāi)發(fā)生命周期側(cè)重于保證代碼質(zhì)量的常見(jiàn)做法。它是一種實(shí)踐,旨在緩和和穩(wěn)固軟件的構(gòu)建過(guò)程。并且能夠幫助您的開(kāi)發(fā)團(tuán)隊(duì)?wèi)?yīng)對(duì)如下挑戰(zhàn):1、軟件構(gòu)建自動(dòng)化:配置完成后,CI系統(tǒng)會(huì)依照預(yù)先制定的時(shí)間表,或者針對(duì)*一特定事件,對(duì)目標(biāo)軟件進(jìn)行構(gòu)建。2、構(gòu)建可持續(xù)的自動(dòng)化檢查:CI系統(tǒng)能持續(xù)地獲取新增或修改后簽入的源代碼,也就是說(shuō),當(dāng)軟件開(kāi)發(fā)團(tuán)隊(duì)需要周期性的檢查新增或修改后的代碼時(shí),CI系統(tǒng)會(huì)不斷確認(rèn)這些新代碼是否破壞了原有軟件的成功構(gòu)建。這減少了開(kāi)發(fā)者們?cè)跈z查彼此相互依存的代碼中變化情況需要花費(fèi)的時(shí)間和精力。3、構(gòu)建可持續(xù)的自動(dòng)化測(cè)試:構(gòu)建檢查的擴(kuò)展部分,構(gòu)建后執(zhí)行預(yù)先制定的一套測(cè)試規(guī)則,完成后觸發(fā)通知(Email,RSS等等)給相關(guān)的當(dāng)事人。4、生成后后續(xù)過(guò)程的自動(dòng)化:當(dāng)自動(dòng)化檢查和測(cè)試成功完成,軟件構(gòu)建的周期中可能也需要一些額外的任務(wù),諸如生成文檔、打包軟件、部署構(gòu)件到一個(gè)運(yùn)行環(huán)境或者軟件倉(cāng)庫(kù)。這樣,構(gòu)件才能更迅速地提供給用戶使用。Jenkins是一個(gè)可擴(kuò)展的持續(xù)集成引擎。主要用于:持續(xù)、自動(dòng)地構(gòu)建/測(cè)試軟件項(xiàng)目以及監(jiān)控一些定時(shí)執(zhí)行的任務(wù)。其擁有的特性包括:1、易于安裝-只要把jenkins.war部署到servlet容器,不需要數(shù)據(jù)庫(kù)支持。2、易于配置-所有配置都是通過(guò)其提供的web界面實(shí)現(xiàn)。3、集成RSS/通過(guò)RSS發(fā)布構(gòu)建結(jié)果或當(dāng)構(gòu)建完成時(shí)通過(guò)通知。4、生成JUnit/TestNG測(cè)試報(bào)告。5、分布式構(gòu)建支持Jenkins能夠讓多臺(tái)計(jì)算機(jī)一起構(gòu)建/測(cè)試。6、文件識(shí)別:Jenkins能夠跟蹤哪次構(gòu)建生成哪些jar,哪次構(gòu)建使用哪個(gè)版本的jar等。7、插件支持:支持?jǐn)U展插件,你可以開(kāi)發(fā)適合自己團(tuán)隊(duì)使用的工具。CI系統(tǒng)基本結(jié)構(gòu)圖該系統(tǒng)的各個(gè)組成部分是按如下順序來(lái)發(fā)揮作用的:1.開(kāi)發(fā)者檢入代碼到源代碼倉(cāng)庫(kù)。2.CI系統(tǒng)會(huì)為每一個(gè)項(xiàng)目創(chuàng)建了一個(gè)單獨(dú)的工作區(qū)。當(dāng)預(yù)設(shè)或請(qǐng)求一次新的構(gòu)建時(shí),它將把源代碼倉(cāng)庫(kù)的源碼存放到對(duì)應(yīng)的工作區(qū)。3.CI系統(tǒng)會(huì)在對(duì)應(yīng)的工作區(qū)執(zhí)行構(gòu)建過(guò)程。4.(配置如果存在)構(gòu)建完成后,CI系統(tǒng)會(huì)在一個(gè)新的構(gòu)件中執(zhí)行定義的一套測(cè)試。完成后觸發(fā)通知(Email,RSS等等)給相關(guān)的當(dāng)事人。5.(配置如果存在)如果構(gòu)建成功,這個(gè)構(gòu)件會(huì)被打包并轉(zhuǎn)移到一個(gè)部署目標(biāo)(如應(yīng)用服務(wù)器)或存儲(chǔ)為軟件倉(cāng)庫(kù)中的一個(gè)新版本。軟件倉(cāng)庫(kù)可以是CI系統(tǒng)的一部分,也可以是一個(gè)外部的倉(cāng)庫(kù),諸如一個(gè)文件服務(wù)器或者像J、SourceForge之類(lèi)的。6.CI系統(tǒng)通常會(huì)根據(jù)請(qǐng)求發(fā)起相應(yīng)的操作,諸如即時(shí)構(gòu)建、生成報(bào)告,或者檢索一些構(gòu)建好的構(gòu)件。二、Jenkins的安裝與部署1、下載yum源:2、導(dǎo)入密鑰:安裝Jenkins:yuminstalljenkins啟動(dòng)前檢查是否安裝jdk:java-version(最好是1.8以上的)修改配置文件:sudovim/etc/init.d/jenkins在candidates="路徑后添加java路徑(根據(jù)個(gè)人Java安裝地址)vi/etc/sysconfig/jenkins找到JENKINS_PORT=“8080”(8080是Jenkins默認(rèn)端口,若被占用課修改為其他空閑端口)關(guān)閉防火墻啟動(dòng)應(yīng)用:sudoservicejenkinsstart三、Jenkins構(gòu)建maven項(xiàng)目1、插件安裝啟動(dòng)Jenkins服務(wù)以后便可登錄瀏覽器訪問(wèn),因?yàn)槲覀冃枰獜膅it上拉取源碼,所以要在Jenkins上安裝相應(yīng)的git插件,同時(shí)我們也需要安裝maven類(lèi)的插件來(lái)支持構(gòu)建maven項(xiàng)目。--》點(diǎn)擊系統(tǒng)管理--》點(diǎn)擊管理插件(下圖換為Jenkins5和Jenkins6)在可選插件中找到Gitplugin和MavenIntegrationplugin插件并安裝插件安裝完畢后重啟Jenkins2、新建maven項(xiàng)目新建一個(gè)job(下圖換為Jenkins7)輸入名稱(chēng)和項(xiàng)目類(lèi)型源碼管理在源碼管理項(xiàng)中選擇git并輸入git地址并在Credentials中Add倉(cāng)庫(kù)登錄賬號(hào)密碼,在下方分支選擇中選擇需要構(gòu)建的項(xiàng)目分支構(gòu)建觸發(fā)器根據(jù)實(shí)際要求構(gòu)建符合要求的觸發(fā)器,此圖中觸發(fā)器PollSCM的功能是每個(gè)一定時(shí)間便檢查源碼是否有更新,若有則自動(dòng)構(gòu)建。(*/60****含義是每隔60分鐘檢查一次git源碼)構(gòu)建選項(xiàng)第一行選項(xiàng)是默認(rèn)的pom文件在git的root目錄下,如果pom文件在其他路徑下,則需要輸入相應(yīng)的路徑/pom.*ml;第二行執(zhí)行的maven命令此時(shí)maven項(xiàng)目構(gòu)建基本就完成,進(jìn)入將maven項(xiàng)目生成docker鏡像的步驟。四、Docker鏡像構(gòu)建1、docker配置在Jenkins中安裝相應(yīng)的docker插件(docker-build-step)在Host服務(wù)器上安裝docker(版本慎用)配置docker的遠(yuǎn)程訪問(wèn):1、centos下修改docker的配置文件/usr/lib/systemd/system/docker.service2、在[Service]的部分添加(此處是暴露的6732端口)E*ecStart=E*ecStart=/usr/bin/dockerd-Htcp://:6732-Huni*://var/run/docker.sock3、docker重新讀取配置文件并重啟docker服務(wù)*systemctldaemon-reload*systemctlrestartdocker進(jìn)入Jenkins,選擇系統(tǒng)管理--》系統(tǒng)設(shè)置--》DockerBuilder在DockerURL處填寫(xiě)暴露的端口tcp://50:6732然后保存這樣Jenkins便可調(diào)用host服務(wù)器中的docker功能創(chuàng)建Docker鏡像執(zhí)行腳本構(gòu)建容器和鏡像:在上一步構(gòu)建war包之后繼續(xù)選擇POSTSteps,執(zhí)行我們放在Jenkins宿主機(jī)上/home/skyform/目錄下的構(gòu)建腳本保存后進(jìn)入操作頁(yè)面并點(diǎn)擊立即構(gòu)建此時(shí)左下角會(huì)出現(xiàn)構(gòu)建進(jìn)度條,藍(lán)色表示構(gòu)建成功,紅色表示構(gòu)建失敗,灰色表示構(gòu)建未完成構(gòu)建結(jié)束后點(diǎn)擊構(gòu)建編號(hào),進(jìn)入結(jié)果查看界面,點(diǎn)擊ConsoleOutput查看構(gòu)建過(guò)程這樣就完成了利用Jenkins來(lái)夠構(gòu)建一個(gè)maven項(xiàng)目并將其制作成Docker鏡像的工作。這個(gè)構(gòu)建過(guò)程會(huì)根據(jù)你的觸發(fā)器設(shè)置來(lái)不斷實(shí)施,從而達(dá)到監(jiān)控軟件開(kāi)發(fā)流程,快速顯示問(wèn)題與部署的目的。保證開(kāi)發(fā)人員以及相關(guān)人員省時(shí)省力提高開(kāi)發(fā)效率。五、案例目前SkyForm產(chǎn)品在進(jìn)行微服務(wù)化改造,我們采用jenkins+docker支撐了SkyForm產(chǎn)品各個(gè)微服務(wù)的開(kāi)發(fā)、部署、測(cè)試的整個(gè)過(guò)程SkyForm產(chǎn)品中間件docker化:SkyForm產(chǎn)品微服務(wù)docker化(19個(gè)):SkyForm5.0微服務(wù)通過(guò)Jenkins實(shí)現(xiàn)持續(xù)集成及構(gòu)建架構(gòu):研發(fā)人員將自己的代碼提交至git倉(cāng)庫(kù),Jenkins響應(yīng)設(shè)定的觸發(fā)器,將提交后的代碼拉取、編譯、打包至Jenkins宿主機(jī)上,然后執(zhí)行腳本,通過(guò)Docker命令在開(kāi)發(fā)環(huán)境(或測(cè)試環(huán)境)生成響應(yīng)鏡像并啟動(dòng)容器,研發(fā)人員此時(shí)即可在開(kāi)發(fā)環(huán)境(或測(cè)試環(huán)境)下進(jìn)行聯(lián)調(diào)。疑問(wèn)及解答Q:項(xiàng)目不同的git分支是怎么打包鏡像了?比如測(cè)試分支和開(kāi)發(fā),生產(chǎn)分支。A:在源碼管理那塊可以設(shè)置不同的分支,需要?jiǎng)?chuàng)建管理不同分支的Jenkins項(xiàng)目。Q:通過(guò)pose啟動(dòng)的服務(wù)在3以后依賴(lài)不起作用了,那如何做前置依賴(lài)健康的檢測(cè)呢,再就是啟動(dòng)的服務(wù)如果服務(wù)失敗后會(huì)自動(dòng)重啟,這樣會(huì)造成很多失敗的實(shí)例,如何清楚這些大量的失敗實(shí)例,還有通過(guò)swarm做的集群在做服務(wù)發(fā)布的時(shí)候會(huì)沒(méi)有tag這是是哪里的問(wèn)題(私有倉(cāng)庫(kù))?A:健康檢測(cè)目前是通過(guò)人工手動(dòng)檢查dubbo服務(wù)注冊(cè)的情況,以后可以將這一功能寫(xiě)到腳本里,例如探測(cè)前一服務(wù)一個(gè)功能是否能正常提供作為服務(wù)健康狀況的評(píng)定標(biāo)準(zhǔn),服務(wù)失敗自動(dòng)重啟的只是那個(gè)失敗的容器不會(huì)導(dǎo)致有大量的失敗容器。Q:.持續(xù)集成和持續(xù)發(fā)布這塊如何銜接?A:持續(xù)集成與持續(xù)發(fā)布這一塊主要是通過(guò)自動(dòng)化部署腳本去完成,通過(guò)將測(cè)試通過(guò)的鏡像保存下來(lái)與自動(dòng)化部署腳本一起打包做成安裝包,*一服務(wù)的升級(jí)也只需將容器鏡像替換重新啟動(dòng)一個(gè)實(shí)例即可。Q:gitlab+jenkins和gitlab+gitlabrunner怎么選擇?A:我們主要是基于將代碼管理與持續(xù)集成分割開(kāi)的理念,加上之前也有jenkins項(xiàng)目經(jīng)驗(yàn)來(lái)選擇的,基于求穩(wěn)的心態(tài)沒(méi)有嘗試gitlabrunner而且gitlabrunner是每次只要有人push代碼就會(huì)觸發(fā)腳本而這不是我們所期望的,我們是期望定期檢查是否執(zhí)行迭代或者定期的執(zhí)行迭代,runner的權(quán)限管理也不如jenkins的更符合我們的訴求。Q:生產(chǎn)和測(cè)試網(wǎng)絡(luò)是隔離的嗎?Jenkins是部署在哪個(gè)網(wǎng)絡(luò)區(qū)域主機(jī)上?Jenkins自身是run在容器里嗎?有沒(méi)有遇到Jenk

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論