Docker+Jenkins+GIT+Tomcat實戰(zhàn)持續(xù)化集成

      網(wǎng)友投稿 794 2025-04-05

      一、概要

      開發(fā)將源碼上傳到github倉庫,通過jenkins持續(xù)集成引擎結(jié)合git工具,將源碼拉取到j(luò)enkins服務(wù)器,通過工具maven在本地講源碼編譯打包成war包,在ssh到docker宿主機,通過執(zhí)行腳本生成制作自定義的dockerfile,最終執(zhí)行生成images,并啟動container,即啟動了包含war包的tomcat,即可實現(xiàn)對外提供web服務(wù)。

      二、環(huán)境部署

      | 主機名 | IP地址 |作用

      | -------- | -------- |

      | Docker-server | 172.20.6.20 |Docker宿主機

      |Jenkins-server | 172.20.6.22 | Jenkins服務(wù)器

      2.1 Jenkins服務(wù)器配置

      Jenkins的安裝及配置Jenkins服務(wù)器的相關(guān)工具(maven、git、ssh)配置,詳細步驟可參考jenkins筆記(1)的相關(guān)工具的安裝及配置。

      2.2 Docker宿主機配置

      Docker的基礎(chǔ)命令可參考容器Docker詳解,需要在Docker宿主機pull下tomcat的基礎(chǔ)環(huán)境以及jenkins服務(wù)器通過docker用戶登錄Docker宿主機,講war包發(fā)布到制定目錄,執(zhí)行特定腳本來生成Dockerfile,最終根據(jù)Dockerfile生成images,并啟動基于包含war包的container,從而實現(xiàn)對外提供WEB服務(wù)。

      創(chuàng)建ssh發(fā)布用戶及目錄

      useradd docker echo "docker:docker" |chpasswd #為docker用戶設(shè)置密碼 mkdir -pv /data/dockerfiles/scripts

      上傳腳本

      將腳本上傳到 /data/dockerfiles/scripts,命名為devops,此名稱可自定義,但是之后在配置jenkins執(zhí)行ssh命令時候的腳本名稱需要一致。由于腳本內(nèi)部的分發(fā)路徑是寫的絕對路徑,所以需要講目錄為固定,也可以根據(jù)實際修改。此腳本author:junsansi,可以參考其進行修改。

      cat >/data/dockerfiles/scripts/devops.sh< ${DOCKER_FILE} echo 'MAINTAINER junsansi "junsansi@sina.com"' >> ${DOCKER_FILE} echo "ADD *.war /usr/local/tomcat/webapps/${PROJECT_NAME}.war" >> ${DOCKER_FILE} echo "EXPOSE 8080" >> ${DOCKER_FILE} echo "CMD /usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out" >> ${DOCKER_FILE} cat ${DOCKER_FILE} echo "**Init dockerfile end." # Build dockerfile cd ${DOCKER_FILE_DIR} rm *.war -rf mv /data/dockerfiles/war/${DOCKER_NAME}/*.war ./ echo "" echo "##Build dockerfile for "${DOCKER_NAME} /usr/bin/docker build -t ${DOCKER_NAME}:${PROJ_VERSION} . # Run docker container echo "" echo "##Running docker container: "${DOCKER_NAME} /usr/bin/docker run --name ${DOCKER_NAME}_d1 -d -p ${SPORT}:${DPORT} ${DOCKER_NAME}:${PROJ_VERSION} EOF chmod +x /data/dockerfiles/scripts/devops.sh chown docker.docker /data/dockerfiles -R

      Docker宿主機獲取tomcat鏡像

      docker pull docker.io/tomcat

      使用docker images查看tomcat鏡像

      此時Docker宿主機就已經(jīng)配置完畢。

      三、Jenkins配置

      登錄Jenkins的WEB界面

      3.1 配置Docker宿主機的ssh信息

      系統(tǒng)管理—系統(tǒng)設(shè)置—Publish over SSH—增加SSH Server

      添加SSH Server可以使用密鑰形式添加,也可以直接使用用戶名密碼, 此處使用用戶名密碼,選擇

      Use password authentication, or use a different key,即docker用戶的密碼,進行登錄發(fā)布,之前已經(jīng)講/data/dockerfiles目錄的屬主屬組更改為docker,確認Jenkins服務(wù)器使用docker用戶可以正常在此目錄下進行后續(xù)操作。

      3.2 構(gòu)建一個maven項目

      一般設(shè)置

      為保證Jenkins服務(wù)器的磁盤有充足的空間,在選中丟棄舊的構(gòu)建->保持構(gòu)建的最大個數(shù)為10個

      在真實開發(fā)環(huán)境中,成員直接相互協(xié)助,GIT是多分支的,考慮到分支管理,需在此選中參數(shù)化構(gòu)建->選擇Git Parameter->定義名稱為release_branch,因此選擇參數(shù)類型為Branch:如果自己發(fā)現(xiàn)devops腳本可以看到里面是調(diào)用了此參數(shù)進行選擇構(gòu)建的分支。

      同時創(chuàng)建考慮到創(chuàng)建Docker的名稱,此時需要給后續(xù)創(chuàng)建的docker images以項目的名稱命名。

      源碼管理

      源碼管理選擇git,填入倉庫url:git@github.com:redhatxl/zrlog.git

      此時發(fā)現(xiàn)會出現(xiàn)報錯信息,因為此倉庫為我的私有倉庫,需要配置Credentials,點開add, Add Credentials的 Kind選擇SSH Username with private key,Username選擇之前在github上傳的公鑰用戶的用戶名,此次為root,Private Key為jenkins服務(wù)器登錄github的本地私鑰,查看私鑰cat /root/.ssh/id_rsa 復(fù)制粘貼到Key區(qū)域,完成添加。此時可以發(fā)現(xiàn)報錯已經(jīng)消失。

      在Branches to build模塊需要填寫之前我們參數(shù)話的變量,在此引用$release_branch

      環(huán)境構(gòu)建

      在build的Goals and options添加maven構(gòu)建參考及命令:clean install -D maven.test.skip=true

      增加構(gòu)建后操作

      增加構(gòu)建后步驟—選擇Send build artifacts over SSH

      SSH-Server name選擇Docker宿主機

      Transfers中填寫Source files:target/*.war

      Remove prefix:target/

      Remote directory:/war/$project_name,即在遠端/data/dockerfiles下的war目錄(/data/dockerfiles/war/docker01-tomcat-zrlog)

      Exec command:/data/dockerfiles/scripts/devop.sh $project_name zrlog $release_branch 8888 8080

      即jenkins服務(wù)器ssh到docker宿主機之后執(zhí)行的腳本命令,執(zhí)行/data/dockerfiles/scripts/devop.sh腳本,此腳本需要傳入5個參考,

      project_name:項目名稱,即docker生成images的名稱

      zrlog:即項目名稱

      release_branch:在git上提交的分支,此處我們只有master分支

      兩個端口,前一個端口及宿主機的監(jiān)聽端口,后一個端口及映射到docker容器內(nèi)部的端口,在此處使用的為tomcat,默認的為8080端口。

      注意:再次可以添加多個server,即實現(xiàn)集群,可以講web服務(wù)器為無狀態(tài),將日志文件掛載到本地物理磁盤以實現(xiàn)日志監(jiān)控即數(shù)據(jù)持久化存儲。

      添加增加構(gòu)建后操作,選擇Editable Email Notification,利用插件郵件來發(fā)送通知。

      可以根據(jù)需求自定義郵件主題與內(nèi)容,此處添加信息接受人,由于全局配置了always,在高級設(shè)置內(nèi),填寫接受人郵箱。

      創(chuàng)建完畢后點擊應(yīng)用并保存。

      3.3 執(zhí)行構(gòu)建

      選擇Build with Parameters,然后在右邊release_branch內(nèi)選擇需要執(zhí)行的github上的分支,此處為master,同理選擇 project_name,為docker images的name可以選擇自己添加自定義的名字,點擊開始構(gòu)建

      查看Console Output

      查看郵件通知

      登錄docker宿主機查看images與container

      網(wǎng)頁測試

      至此利用jenkins簡單的實現(xiàn)了講github上的源碼拉去到j(luò)enkins服務(wù)器本地,利用maven編譯生成war包并分發(fā)到docker宿主機,執(zhí)行腳本生成dockerfile,并啟動容器,最終郵件通知。

      四、啟動多個容器

      在配置jenkins的ssh后的命令我們可以添加多個server從而實現(xiàn)分布式,同時我們也可以對在一臺主機上通過區(qū)分端口號來生成多個images并啟動多個不通端口的container

      在General的參數(shù)化構(gòu)建過程中增加第三個參數(shù)proxy_port可以設(shè)置為docker宿主機的本地監(jiān)聽端口從而實現(xiàn)多端口多實例

      Docker+Jenkins+GIT+Tomcat實戰(zhàn)持續(xù)化集成

      在ssh命令中調(diào)用

      在構(gòu)建開始時可以定義不同的images對應(yīng)不通的端口

      查看啟動后的容器

      注意:如果有特殊需求,例如發(fā)布php代碼或其他可以自行對腳本進行修改,可以根據(jù)需求定義多個參數(shù)靈活使用。

      Docker Git Tomcat

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Excel2007表格怎么制作折線圖(Excel表格如何制作折線圖)
      下一篇:excel利用公式數(shù)字轉(zhuǎn)換文本的方法步驟詳解
      相關(guān)文章
      亚洲熟妇丰满多毛XXXX| 亚洲国产精品一区二区九九| 亚洲午夜久久久久妓女影院 | 亚洲AV人人澡人人爽人人夜夜| 国产精品高清视亚洲精品| 亚洲桃色AV无码| 国产成人综合亚洲绿色| 亚洲精品中文字幕无码A片老| 国产精品高清视亚洲精品| 亚洲中文字幕在线无码一区二区 | 在线观看亚洲网站| 亚洲精品国产suv一区88| 亚洲一区二区三区成人网站| 学生妹亚洲一区二区| 亚洲色偷偷色噜噜狠狠99| 亚洲日本中文字幕天天更新| 亚洲熟妇无码一区二区三区| 亚洲熟妇成人精品一区| 人人狠狠综合久久亚洲| 午夜亚洲国产成人不卡在线| 亚洲国产91精品无码专区| 亚洲一级特黄大片无码毛片| 国产亚洲大尺度无码无码专线| 中文字幕人成人乱码亚洲电影 | 久久亚洲色一区二区三区| 亚洲线精品一区二区三区影音先锋| 亚洲一区爱区精品无码| 亚洲av无码潮喷在线观看| 亚洲人成电影在在线观看网色| 色婷婷六月亚洲婷婷丁香| 亚洲成av人片不卡无码| 亚洲av午夜精品无码专区| 亚洲人成网站免费播放| 自拍偷自拍亚洲精品偷一| 亚洲A∨精品一区二区三区| 久久国产成人精品国产成人亚洲| 亚洲乱色熟女一区二区三区丝袜| 亚洲AV日韩精品久久久久久| 亚洲综合区图片小说区| 亚洲1234区乱码| 亚洲日韩在线中文字幕综合|