Git + Maven + Jenkins 实现自动化部署
一、安裝 和 準備工作
? ? 我們選擇了用 Tomcat 服務(wù)器下 war 包的安裝方式。Jenkins 的下載地址:http://mirrors.jenkins-ci.org/,打開鏈接后,表格有war列。Releases行是短期更新包,LTS行是長期更新包。一般選擇Releases下載即可。將下載完成的 war 包 放在 Tomcat 服務(wù)器的 webapps 目錄下,然后啟動服務(wù)器即可。建議單獨用一臺 Tomcat 服務(wù)器部署,方便管理。
? ? 1、Tomcat 服務(wù)器運行起來后,用瀏覽器訪問 http://ip地址:端口號/jenkins 如下圖:
? ? ? ? ?
? ? 2、在 Linux 服務(wù)器上執(zhí)行 cat?/root/.jenkins/secrets/initialAdminPassword 復(fù)制密碼并粘貼:
? ? ? ?
? ? 3、安裝推薦的插件即可。插件安裝完成后,可以創(chuàng)建一個管理員賬戶:
? ? ? ??
? ? 4、創(chuàng)建用戶后,進入Jenkins ,頁面如下圖:
? ? 5、點擊 系統(tǒng)管理 --> 管理插件 --> 可選插件 ,搜索?Maven Integration (用來Maven 編譯打包)和?Publish Over SSH (用于遠程服務(wù)器發(fā)布) 插件,安裝完成后重啟:http://IP地址:端口號/jenkins/restart
? ? 6、點擊 系統(tǒng)管理 --> 全局工具配置,安裝配置好 JDK、Maven 和 Git。不會安裝的自行百度...
tips:安裝好 git 后請把服務(wù)器公鑰添加到 gitlab 服務(wù)器。?
二、構(gòu)建 Maven 項目?
? ? 1、輸入任務(wù)名稱,選擇 構(gòu)建一個 Maven 項目:
? ? 2、源碼管理
? ? 3、構(gòu)建觸發(fā)器
build whenever a snapshot dependency is built -->當job依賴的快照版本被build時,執(zhí)行本job。
build after other projects are built -->當本job依賴的job被build時,執(zhí)行本job
build periodically -->隔一段時間build一次,不管版本庫代碼是否發(fā)生變化,通常不會采用此種方式。
poll scm -->隔一段時間比較一次源代碼如果發(fā)生變更,那么就build。否則,不進行build,通常采用這種方式。
這里我選擇手動觸發(fā)部署,所以沒有勾選任何一項。
? ? 4、構(gòu)建環(huán)境
Delete workspace before build starts --> 默認刪除所有的,也可以設(shè)置刪除特定的文件
- Patterns for files to be deleted:正則匹配刪除哪些文件
- Apply pattern also on directories:規(guī)則是否也應(yīng)用到文件夾
- Check parameter:是否刪除,是個bool值,true則刪除,false不刪除
- External Deletion Command:執(zhí)行外部刪除命令
Abort the build if it’s stuck --> 構(gòu)建阻塞的時候,根據(jù)超時策略處理.
- Time-out strategy:超時策略,有絕對時間,相對時間,根據(jù)以前的構(gòu)建時間判斷等
- Time-out variable:超時時間
- Time-out actions:超時后的處理,如終結(jié),faile調(diào)或者寫描述
- Add timestamps to the Console Output:在輸出界面添加時間戳
- Use secret text(s) or file:使用密文,用于全局性的管理密碼等,勾選后會在下方出現(xiàn)Binding,輸入需要的用戶名,密碼證書等就可以了。
? ? 5、Build
? ? ?6、Post Steps
當Maven 編譯打包完成后,接下來的工作就是 把 war包 解壓到 Tomcat 服務(wù)器的 /webapps/ROOT 目錄下,然后重啟服務(wù)器。為此準備了兩個腳本?deploy.sh (解壓war包并重啟服務(wù)器),重啟服務(wù)器 用到了另一個腳本?restart.sh 。接下來看一下這兩個腳本的具體內(nèi)容:
deploy.sh?
#!/bin/shwar=$1 bin=$(cd `dirname $0`; pwd)if [ ! -n "${war}" ]; thenecho "***Usage: $0 [project.war]"exit 0 fi if [ ! -f "${war}" ]; thenecho "***Error: ${war} does not exist."exit 0 fi if [ ! "${war##*.}" = "war" ]; thenecho "***Error: ${war} is not a war file."exit 0 fiecho "Deploy ${war##*/}..." rm -rf ${bin}/../webapps/ROOT/ cd ${bin}/../webapps && mkdir ROOT && cd ROOT jar -xvf ${war} rm -rf ${bin}/../work/Catalina/localhost/ echo "Restart tomcat..." sh ${bin}/restart.sh備注:1、deploy.sh會先清空tomcat下的ROOT目錄,再將指定的war包加壓至ROOT目錄,最后執(zhí)行restart.sh重啟tomcat。
? ? ? ? ? 2、可以使用 unzip 命令 直接解壓,但是我發(fā)現(xiàn)我們服務(wù)器上經(jīng)常沒有安裝 unzip 這個軟件,所以選擇了如上的方式。
? ? ? ? ? 3、一鍵發(fā)布命令:./deploy.sh 項目war包 ? ?例如:./deploy.sh /home/test.war 。
restart.sh
#!/bin/shbin=$(cd `dirname $0`; pwd) pid=$(ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} | awk '{print $2}') if [ -n "${pid}" ]; thenecho "Shutdown..."sh ${bin}/shutdown.shsleep 3pid=$(ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} | awk '{print $2}')if [ -n "${pid}" ]; thenkill -9 ${pid}sleep 1fi fiecho "Startup..." sh ${bin}/startup.sh if [ "$1" = "-v" ]; thentail -f -n 600 ${bin}/../logs/catalina.out fi備注:1、restart.sh是用來重啟tomcat的,如果tomcat沒有啟動則直接啟動,如果已經(jīng)啟動就先shutdown再啟動,如果shutdown之后3s沒有停掉tomcat進程,則kill掉原來的進程再啟動。
? ? ? ? ? 2、如需重啟tomcat則使用命令:./restart.sh 或 ./restart.sh -v (參數(shù)-v表示啟動時打印tomcat啟動日志)。
?
實施方案:?把 deploy.sh 和 restart.sh 拷貝到 Tomcat 的bin目錄下,再用chmod +x 給這兩個腳本賦上可執(zhí)行權(quán)限。
本地部署方案:
#!/bin/sh export BUILD_ID=qianxx sh /home/wwwroot/t8_8280_passenger/bin/deploy.sh ${WORKSPACE}/target/*.war View Code遠程服務(wù)器部署方案:
系統(tǒng)管理 --> 系統(tǒng)設(shè)置 -->?Publish over SSH ,服務(wù)器配置如下:
2. 工程中配置
/home/wwwroot/t8_8180_common/bin/deploy.sh /root/common/*.war View Code總結(jié)
以上是生活随笔為你收集整理的Git + Maven + Jenkins 实现自动化部署的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringCloud学习笔记:服务注册
- 下一篇: 【深度学习】数据降维方法总结