docker+jenkins+SVN自動構(gòu)建部署Maven項目

什么是持續(xù)集成?

1.Continuous integration(CI)

持續(xù)集成是一種軟件開發(fā)實踐,即團(tuán)隊開發(fā)成員經(jīng)常集成他們的工作,通常每個成員至少集成一次,也就意味著每天可能會發(fā)生多次集成。每次集成都通過自動化的構(gòu)建(包括編譯,發(fā)布,自動化測試)來驗證,從而盡快地發(fā)現(xiàn)集成錯誤。許多團(tuán)隊發(fā)現(xiàn)這個過程可以大大減少集成的問題,讓團(tuán)隊能夠更快的開發(fā)內(nèi)聚的軟件。

2.沒有持續(xù)集成

項目做模塊集成的時候,發(fā)現(xiàn)很多接口都不通==>浪費大量時間
需要手動去編譯打包最新的代碼==>構(gòu)建過程不透明
發(fā)布代碼,上線,基本靠手工==>腳本亂飛

摘自https://www.cnblogs.com/jimmy-xuli/p/9020825.html

3. 如何解決這些問題

持續(xù)集成是一個理念,落實持續(xù)集成我們需要借助工具,如果我們不借助工具的話,很難實現(xiàn)。

jenkins下載

jenkins官網(wǎng)https://jenkins.io/zh/

image.png

進(jìn)入官網(wǎng)進(jìn)行下載,細(xì)心的同學(xué)估計已經(jīng)發(fā)現(xiàn)了,下載下來的是一個war包

jenkins啟動

將war包放進(jìn)tomcat中啟動

這里我們用docker做環(huán)境隔離,以免和本機(jī)環(huán)境沖突,docker的安裝這里就不多做介紹了,大家自行了解

創(chuàng)建tomcat容器
docker run -itd --name jenkins -p 1888:8080 tomcat:8.5

訪問本機(jī)地址:http://localhost:1888/
看到如下界面說明tomct容器創(chuàng)建成功

image.png

啟動jenkins

將下載的jenkins.war文件放入容器的/usr/local/tomcat/webapps/文件下tomcat會自動啟動這個項目
docker 拷貝宿主機(jī)文件到容器內(nèi)

docker cp 宿主機(jī)文件位置 容器名稱:容器路徑

舉例:

docker cp ./jenkins.war jenkins:/usr/local/tomcat/webapps/

將宿主機(jī)當(dāng)前目錄下的jenkins.war 拷貝到名稱為jenkins的容器/usr/local/tomcat/webapps/文件夾下
訪問地址:http://localhost:1888/jenkins/
看到如下界面jenkins啟動成功

image.png

jenkins安裝引導(dǎo)

  • 根據(jù)提示:將/root/.jenkins/secrets/initialAdminPassword文件內(nèi)容復(fù)制填寫
  • 這里的目錄當(dāng)然是指的容器里的路徑
    進(jìn)入容器
docker exec -it jenkins /bin/bash

進(jìn)入容器效果圖


image.png

查看文件內(nèi)容

cat /root/.jenkins/secrets/initialAdminPassword
image.png

將內(nèi)容復(fù)制出來寫入jenkins引導(dǎo)頁面點繼續(xù)
出現(xiàn)如下界面: 選擇"安裝推薦的插件"


image.png

進(jìn)入如下界面,等待安裝完成


image.png

安裝完成后自動進(jìn)入如下界面: 點擊"使用admin賬戶繼續(xù)"


image.png

出現(xiàn)如下界面點擊:"保存并完成"


image.png

出現(xiàn)如下界面點擊:"開始使用jenkins"


image.png

jenkins引導(dǎo)完成


image.png

jenkins配置操作權(quán)限

公開權(quán)限(設(shè)置任何人有任何權(quán)限)


image.png

選擇Anyone can do anything 然后保存


image.png

jenkins配置全局工具

image.png

配置Maven的settings.xml文件, 選擇“文件系統(tǒng)中的settings文件” ,并填寫settings.xml的位置


image.png

這里的位置當(dāng)然也是容器里面的位置了
容器內(nèi)目前還沒有maven環(huán)境
安裝maven

apt-get install maven

信息如下,提示找不到maven的包


image.png

將源改為國內(nèi)站點,這樣下載maven比較快
運行如下命令

cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo "" > /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian-security stretch/updates main" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian-security stretch/updates main" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib" >> /etc/apt/sources.list

更新源

apt-get update

再次安裝maven, 安裝過程中會有一次詢問,輸出Y敲回車?yán)^續(xù)安裝

apt-get install maven

查看maven是否安裝成功, 查看maven版本信息

mvn -v

如下: 得知maven home的位置是 /usr/share/maven, 將此地址加上/conf/settings.xml填入全局設(shè)置里面


image.png
image.png

修改maven倉庫地址為國內(nèi)站點,提升下載速度
先下載vim, 下載過程中會詢問是否繼續(xù)輸入Y敲回車

apt-get install vim

maven設(shè)置國內(nèi)地址

vim  /usr/share/maven/conf/settings.xml

在mirrors標(biāo)簽下添加如下

<mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
image.png
配置maven

因為我們用不到git所有刪除git配置,
點擊新增maven 勾掉自動安裝
maven的別名: myMaven
maven的地址: /usr/share/maven


image.png
配置jdk

查看java_home

cat $JAVA_HOME
image.png

得知JAVA_HOME為/usr/local/openjdk-8

image.png

配置完成之后點擊保存

創(chuàng)建構(gòu)建任務(wù)

image.png
image.png

點擊保存


image.png

點擊工作區(qū)


image.png

這里還不能構(gòu)建,因為我們還沒有配置SVN項目


image.png
配置SVN項目(假如你已經(jīng)準(zhǔn)備好了SVN的環(huán)境,如果沒有請移步本文下方subversion服務(wù)安裝)
image.png

點擊 源碼管理----> subversion 配置項目倉庫地址

  • 注意這里:填寫的不是localhost而是10.0.17.1,作為容器來說他會從我們配置的地址去拉取源碼,localhost是本機(jī)的意思,在jenkins容器中執(zhí)行的話就代表容器本身,jenkins本身沒有沒有SVN服務(wù),所以這里不能配置localhost,要配置局域網(wǎng)
  • 為什么不是192.xx.xx.xx 而是10.0.17.1
    因為我們的192.xx.xx.xxIP地址是動態(tài)IP,也許下次鏈接的時候就變成別的了,這樣下次構(gòu)建就拉不到源碼了
    而10.0.17.1這個IP是分配給Docker的虛擬網(wǎng)卡的IP這里只要你不改就不會變的

查看docker ip

ipconfig
image.png

也可以通過網(wǎng)絡(luò)鏈接查看


image.png
image.png

添加svn賬號密碼 @HEAD 拉去最新版本的代碼

image.png

填寫完成點擊添加


image.png

選擇剛剛添加的憑證


image.png
配置構(gòu)建
image.png

選擇我們之前配置的maven


image.png

構(gòu)建命令 clean package

image.png

構(gòu)建項目

進(jìn)入myProject任務(wù)


image.png

立即構(gòu)建

  • 藍(lán)色:成功
  • 紅色:失敗
  • 灰色:取消的


    image.png

查看構(gòu)建過程


image.png

控制臺輸出的構(gòu)建信息


image.png

進(jìn)入工作區(qū)查看構(gòu)建之后的內(nèi)容


image.png
image.png

進(jìn)入target, 構(gòu)建完成 產(chǎn)生的war包, 到這里我們實現(xiàn)了構(gòu)建


image.png

部署

deploy to container
部署到容器的插件: deploy to container
tips: 安裝的時候有可能會失敗,多試幾次就可以了

image.png

安裝 deploy to container插件


image.png

如果這一步失敗的話,多試幾次


image.png
配置構(gòu)建后的操作(假如你已經(jīng)有tomcat服務(wù)了,否則請移步本文下方:tomcat服務(wù)器)
image.png

配置war包位置及訪問名稱
這里的war包是你打包之后的war包位置, 一般都是在項目的target目錄下,war包名稱直接點擊工作空間下的target看下就知道了,我這里是ssm.war
項目訪問后綴為ssm


image.png

選擇部署的容器版本


image.png

添加tomcat用戶名密碼


image.png
image.png

選中添加的用戶


image.png

配置tomcat地址 這里的ip于svn同理


image.png

執(zhí)行構(gòu)建之前查看tomcat8.5容器內(nèi)的webapps


image.png

點擊構(gòu)建項目


image.png

構(gòu)建項目之后, 已經(jīng)將war包部署上去了

image.png

訪問:http://10.0.17.1:1890/ssm/
完成構(gòu)建后自動部署

image.png

構(gòu)建觸發(fā)器

填寫token 自己隨便寫


image.png

根據(jù)提示拼接地址: http://jenkinsUrl/job/myProject/build?token=自己設(shè)置的token值
保存之后訪問:會觸發(fā)jenkins構(gòu)建 這里ip是10.xx.xx與svn同理
http://10.0.17.1:1888/jenkins/job/myProject/build?token=AUTO_DEPLOY

image.png

訪問之后查看jenkins, 正在構(gòu)建


image.png

現(xiàn)在通過訪問地址就能觸發(fā)構(gòu)建,接下來在svn commit的時候訪問這個地址就能完成自動構(gòu)建和部署

自動構(gòu)建

進(jìn)入svn服務(wù)器

docker exec -it svn /bin/bash
安裝curl
apt-get install curl
利用curl訪問觸發(fā)地址
curl http://10.0.17.1:1888/jenkins/job/myProject/build?token=AUTO_DEPLOY
image.png
現(xiàn)在要做的是SVN提交后觸發(fā)這個腳本就可以實現(xiàn)自動部署

進(jìn)入項目hooks

cd /var/local/svn/myProject/hooks

拷貝post-commit.tmpl

docker cp post-commit.tmpl post-commit

將觸發(fā)腳本寫入 post-commit 文件

vim post-commit
  • post-commit 文件是SVN內(nèi)置的,commit之后就會自動執(zhí)行post-commit文件
    將post-commit 設(shè)置為可執(zhí)行文件
chmod 755 post-commit 

這里的#!/bin/sh 一定不能去掉,否則會導(dǎo)致,不能觸發(fā)部署


image.png

修改項目并且提交


image.png

提交成功后開始自動構(gòu)建


image.png

訪問我們部署的項目,修改內(nèi)容成功! 以后每次commit都會自動構(gòu)建部署

image.png

subversion 服務(wù)安裝


用svn鏡像創(chuàng)建subversion服務(wù)

docker run -itd --name svn -p 1889:80  marvambass/subversion

訪問:http://localhost:1889/
如下界面,svn服務(wù)端創(chuàng)建完成

image.png

修改apt源為國內(nèi)的
cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo "" > /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list

更新源

apt-get update

安裝vim 安裝過程中會詢問你是否繼續(xù),輸入Y敲回車?yán)^續(xù)安裝

apt-get install vim
在svn上創(chuàng)建一個項目

進(jìn)入svn容器

docker exec -it svn /bin/bash

進(jìn)入svn倉庫

cd /var/local/svn/

創(chuàng)建項目倉庫

svnadmin create myProject

修改倉庫配置

cd myProject/conf/
vim svnserve.conf

將如下注釋打開

anon-access = none   
auth-access = write
password-db = passwd
authz-db = authz

tips:anon-access=read屬性除了去掉注釋還需要把值改為none

image.png

創(chuàng)建一個用戶

vim passwd

在結(jié)尾添加如下內(nèi)容

svn_user = 123456
  • 創(chuàng)建一個用戶:svn_user
  • 密碼:123456


    image.png

設(shè)置用戶權(quán)限

vim authz

在結(jié)尾添加如下內(nèi)容

[/]
svn_user = rw
* = 
  • svn_user = rw:設(shè)置svn_user用戶對跟目錄有讀寫權(quán)限
  • *= :其他用戶沒有權(quán)限
image.png

訪問http://localhost:1889/svn/
如下項目倉庫創(chuàng)建成功

image.png

測試鏈接svn服務(wù)

用idea測試鏈接


image.png

輸入svn倉庫地址 http://localhost:1889/svn/myProject

image.png

雙擊輸入用戶名密碼


image.png
將項目上傳到SVN MyProject倉庫中

自己到創(chuàng)建一個maven項目獲取去github上下載一個
將項目交給版本控制工具管理


image.png

選擇subversion


image.png

項目變成紅色,已經(jīng)交給了SVN管理但是還沒有與遠(yuǎn)程倉庫同步


image.png

將項目關(guān)聯(lián)遠(yuǎn)程倉庫
右鍵項目跟目錄


image.png

選擇要關(guān)聯(lián)的遠(yuǎn)程倉庫地址


image.png

點擊ok


image.png

完成關(guān)聯(lián)


image.png

將項目提交到遠(yuǎn)程svn倉庫


image.png

選擇要提交的文件
.gitignore .idea test 不需要提交, 尤其是test構(gòu)建的時候有可能會執(zhí)行單元測試,如果失敗就會影響發(fā)布
點擊commit提交到遠(yuǎn)程倉庫


image.png

這里是警告信息,直接點擊commit


image.png

這里是警告信息,直接點擊commit


image.png

提交到遠(yuǎn)程倉庫之后沒有顏色了


image.png

訪問http://localhost:1889/svn/myProject/

image.png

tomcat服務(wù)器安裝


使用docker安裝tomcat服務(wù)

docker run -itd --name tomcat8.5 -p 1890:8080 tomcat:8.5

訪問地址:http://localhost:1890/
效果圖

image.png

更改為國內(nèi)源

進(jìn)入tomcat

docker exec -it tomcat8.5 /bin/bash
cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo "" > /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian-security stretch/updates main" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian-security stretch/updates main" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib" >> /etc/apt/sources.list
更新源
apt-get update
安裝vim, 安裝過程中會詢問是否繼續(xù),輸入Y敲回車?yán)^續(xù)安裝
apt-get install vim
配置tomcat用戶

修改文件

 vim /usr/local/tomcat/conf/tomcat-users.xml

我這里配置的用戶名是 tomcat_user 密碼:123456
添加如下代碼

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="tomcat_user" password="123456"
roles="manager-gui,manager-script,manager-jmx,manager-status" />
image.png
設(shè)置IP訪問權(quán)限
vim /usr/local/tomcat/webapps/manager/META-INF/context.xml

注釋掉

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
image.png

重啟容器

docker restart tomcat8.5

訪問:http://localhost:1890
驗證用戶

image.png

效果圖: 配置完成


image.png

寫作不易,如果文章對您有幫助請給個贊支持下,如有錯誤請指出。謝謝~~

版權(quán)聲明:原創(chuàng)文章,轉(zhuǎn)載請注明來源。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內(nèi)容