持續(xù)的軟件版本發(fā)布/測試項目。
監(jiān)控外部調(diào)用執(zhí)行的工作。
為什么使用Jenkins?
先來看看一般的后端項目發(fā)布流程:
1、本地或打包服務(wù)器利用maven打成war包
2、遠程或者SSH連上項目服務(wù)器
3、停掉tomcat,刪除舊包和緩存,將新打的包放進去
4、重啟tomcat,完成
看似步驟簡單,其實占用了大量開發(fā)和運維的時間。
使用Jenkins后:
1、點擊立即構(gòu)建,完成。
什么?點擊個按鈕就完成了?沒錯,就是個按鈕。其實在你點擊按鈕后Jenkins已經(jīng)幫你把上述該走的流程后臺跑了一遍了。再搭配Gitlab的githooks可實現(xiàn)提交代碼后自動構(gòu)建發(fā)布,連按鈕也不需要點了。
在開發(fā)項目的過程中會部署測試環(huán)境來驗證產(chǎn)品功能,重復(fù)以上操作會顯得很繁瑣,浪費大量時間,所以使用Jenkins來實現(xiàn)持續(xù)集成,對整個開發(fā)項目的過程有著重要的意義。使用Jenkins后,可節(jié)省手動發(fā)布時間成本,避免人工打包出錯,同時也能及時發(fā)現(xiàn)系統(tǒng)開發(fā)集成過程中產(chǎn)生的問題。
本文接下來介紹如何基于Jenkins+Maven+Git(GitLab)持續(xù)集成Java項目。
上圖為Java測試環(huán)境從代碼提交到應(yīng)用部署的自動化完整流程。
下面我們具體來看Jenkins的安裝和配置。
現(xiàn)場測試環(huán)境如下,兩臺Linux虛擬機,安裝好以下軟件:
名稱 | IP | 安裝軟件 |
代碼托管、持續(xù)集成 | 192.168.3.144 | JDK1.8、Maven3.5.4、Git1.7.1、Gitlab、Jenkins |
應(yīng)用服務(wù)器 | 192.168.3.145 | JDK1.8、Tomcat |
分別檢驗上述軟件的安裝情況:
檢驗JDK環(huán)境
檢驗Maven
檢驗Git
檢驗Gitlab
添加訪問Gitlab的ssh憑證
在192.168.3.144使用root用戶生成公鑰和私鑰
執(zhí)行ssh-keygen-t rsa,在/root/.ssh/目錄生成公鑰和私鑰
id_rsa:私鑰文件
id_rsa.pub:公鑰文件
把生成的公鑰放在Gitlab中
登錄192.168.3.144->點擊頭像->Settings->SSHKeys
Jenkins提前安裝完畢。以Tomcat的war包形式來安裝,啟Jenkins。
安裝相關(guān)插件
發(fā)布插件Deploy to container Plugin
Maven插件Maven Integration plugin
Git插件Git plugin
SSH插件Publish Over SSH
Gitlab插件GitLab Plugin
Gitlab鉤子插件Gitlab Hook Plugin
在Jenkins中配置SSHServers
構(gòu)建Maven項目
源碼管理
填寫git地址信息,由于已配置ssh,無需配置認證憑據(jù)
構(gòu)建觸發(fā)器
Buildwhen a change is pushed to GitLab:檢測到Gitlab項目代碼提交后就觸發(fā)
同時需要在Gitlab的Webhooks中配置上圖圈出的地址,勾上Pushevents觸發(fā)
打包前步驟
根據(jù)自己需求可以添加一些操作:如一些shell命令
Build打包構(gòu)建
RootPOM:指定pom.xml的文件路徑(這里是相對路徑)
Goalsand options:mvn的選項,構(gòu)件參數(shù)
構(gòu)建后操作
把構(gòu)建好的jar包推送至應(yīng)用主機,并執(zhí)行啟停腳本拉起應(yīng)用服務(wù)
stop.sh
#!/bin/sh
APP_NAME=amp_dev_server.jar
tpid=`ps-ef|grep $APP_NAME|grep -v grep|grep -v kill|awk {print $2}`
if [${tpid} ]; then
echoStop Process...
kill-15 $tpid
fi
sleep5
tpid=`ps-ef|grep $APP_NAME|grep -v grep|grep -v kill|awk {print $2}`
if [${tpid} ]; then
echoKill Process!
kill-9 $tpid
else
echoStop Success!
fi
start.sh
#!/bin/sh
source/etc/profile
APP_NAME=amp_dev_server.jar
tpid=`ps-ef|grep $APP_NAME|grep -v grep|grep -v kill|awk {print $2}`
if [${tpid} ]; then
echo App is running.
else
echo App is NOT running.
fi
#!/bin/sh
rm-f tpid
nohupjava -jar /home/gpadmin/soft/amp_dev_server/amp_dev_server.jar--spring.profiles.active=test>/home/gpadmin/soft/amp_dev_server/amp_dev_server.log 2>&1&
echo$! > tpid
echoStart Success!
到此配置完成,保存即可。
Jenkins常用構(gòu)建方式有三種:
手動構(gòu)建:用于測試環(huán)境或者預(yù)上線環(huán)境部署,只需要在Jenkins的界面點立即構(gòu)建即可執(zhí)行
觸發(fā)式構(gòu)建:用于開發(fā)環(huán)境部署,開發(fā)人員可以push代碼或者合并代碼到Gitlab項目的開發(fā)分支上,Jenkins就自動部署代碼到對應(yīng)服務(wù)器
定時構(gòu)建:在參數(shù)化構(gòu)建基礎(chǔ)上添加,可以每天定時打包
驗證項目是否構(gòu)建成功
Jenkins使用各種顏色表示任務(wù)當前的狀態(tài):
藍色:任務(wù)最近一次構(gòu)建是成功的
紅色:任務(wù)最后一次構(gòu)建是失敗的
黃色:任務(wù)最后一次構(gòu)建表示成功了,但不穩(wěn)定(主要是因為有失敗的測試)
灰色:任務(wù)從未被執(zhí)行過或被禁用了
Jenkins使用一組天氣圖標表示任務(wù)長期的一個狀態(tài),他們分別是:
萬里晴空,任務(wù)80%以上的集成都是成功的
稍有烏云,任務(wù)有60%~80%的集成是成功的
烏云密布,任務(wù)只有40%~60%的集成是成功的
陰雨綿綿,任務(wù)的集成成功率只有20%~40%
電閃雷鳴,任務(wù)的集成成功率不到20%
實際上,產(chǎn)品在從需求到部署的過程中,會經(jīng)歷若干種不同環(huán)境,例如各種自動化測試運行環(huán)境、仿真環(huán)境、生產(chǎn)環(huán)境等。這些環(huán)境的搭建、配置、管理過程中,產(chǎn)品對應(yīng)也需要在不同環(huán)境中進行部署,狀況也會比較復(fù)雜,從頭到尾地全自動持續(xù)部署的確困難。但如果能克服困難,做到持續(xù)交付,保證代碼在整個上線流程環(huán)境沒問題,整個團隊就能做到有的放矢,也更加有力的保證了代碼上線質(zhì)量。所以,持續(xù)集成、持續(xù)部署和持續(xù)交付提供了一個優(yōu)秀的DevOps環(huán)境,對于整個團隊來說,好處與挑戰(zhàn)并行。無論如何,頻繁部署、快速交付以及開發(fā)測試流程自動化都將成為未來軟件工程的重要組成部分。未來已經(jīng)改變,不變者終將被淘汰。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/130189.html
摘要:如果還沒有搭建好可以使用的,請先移步到這篇文章進行搭建使用自動部署服務(wù)一搭建篇目標通過實現(xiàn)推送代碼后自動部署基于的服務(wù)準備工作獲取示例項目或者直接復(fù)制以下文件內(nèi)容獲取示例項目項目文件頁面文件鏡像文件部署文件部署腳本文件頁面文件項目很簡單, 如果還沒有搭建好可以使用 Docker 的 Jenkins,請先移步到這篇文章進行搭建 使用 Jenkins 自動部署 Docker 服務(wù)(一、Je...
摘要:原博客地址實現(xiàn)前端項目自動化集成打包部署掘金地址前言以前寫前端項目打包部署,都是手動運行命令,打包完,然后壓縮,再上傳到服務(wù)器解壓。驗證提交代碼,成功自動打包部署提交代碼,觀察界面,出現(xiàn)構(gòu)建任務(wù),構(gòu)建完成之后收到郵件通知。 原博客地址:https://yezihaohao.github.io/2017/09/09/Jenkins實現(xiàn)前端項目自動化集成打包部署/掘金地址:https://...
摘要:在本教程中,我們將使用在上部署和伸縮。它主要用來幫助操作人員部署伸縮更新和維護服務(wù),以及提供服務(wù)發(fā)現(xiàn)機制來管理節(jié)點集群上的容器化應(yīng)用程序。代理則使用,網(wǎng)絡(luò)啟動協(xié)議啟動,因此容器能夠在啟動和運行之后自動連接到。賬戶我們將在上部署集群。 在本教程中,我們將使用Rancher在Kubernetes上部署和伸縮Jenkins。按照本文的步驟一步步來,你將會使用到我們用來測試實際構(gòu)建作業(yè)的mas...
摘要:本文將使用這些命令搭建一個持續(xù)集環(huán)境,解決不能聯(lián)網(wǎng)的問題來安裝各種常用插件。總結(jié)通過本章學(xué)習(xí),你已經(jīng)知道了基于如何在環(huán)境下搭建環(huán)境,并創(chuàng)建一個項目。以為基礎(chǔ)框架,為數(shù)據(jù)訪問層,為權(quán)限授權(quán)層,對常用數(shù)據(jù)進行緩存,基于構(gòu)建的作為前端框架。 回顧:上一文對Docker常用的命令以羅列的方式做了一個詳盡的介紹。本文將使用這些命令搭建一個jenkins持續(xù)集環(huán)境,解決jenkins不能聯(lián)網(wǎng)的問題...
摘要:行業(yè)內(nèi)各巨頭的自動化運維架構(gòu)都各種功能各種酷炫,如下圖,讓人可望不可及。面對這么多問題,我就想啊,如何在低成本情況下實現(xiàn)自動化運維。自動擴縮容通過配置告警規(guī)則,調(diào)用相應(yīng)就可以實現(xiàn)實戰(zhàn)以上就是筆者關(guān)于自動化運維的一些實踐。 行業(yè)內(nèi)各巨頭的自動化運維架構(gòu)都各種功能各種酷炫,如下圖,讓人可望不可及?,F(xiàn)在最終的樣子大家都知道了,但問題是如何根據(jù)自己團隊當前的情況一步步向那個目標演進?筆者所在團隊,三...
摘要:對測試的影響讓單元測試運行的更順暢單元測試驅(qū)動開發(fā)是一個很好的應(yīng)用程序開發(fā)方式,單元測試往往也是和代碼一起被提交到代碼倉庫中。但是很多單元測試通常依賴于很多其他服務(wù),而這些服務(wù)的標準化配置往往是一個難點,如數(shù)據(jù)庫的搭建防火墻的配置等。 傳統(tǒng)的軟件開發(fā)、測試、運維需要三個團隊在三個不同的環(huán)境中進行,而三個環(huán)境的不同引發(fā)了很多的問題。如:工作內(nèi)容的重復(fù);開發(fā)環(huán)境中可運行的程序在測試和運維環(huán)...
閱讀 1459·2023-01-11 13:20
閱讀 1814·2023-01-11 13:20
閱讀 1263·2023-01-11 13:20
閱讀 2006·2023-01-11 13:20
閱讀 4226·2023-01-11 13:20
閱讀 2879·2023-01-11 13:20
閱讀 1488·2023-01-11 13:20
閱讀 3807·2023-01-11 13:20