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