docker+jenkins+SVN自動構建部署Maven項目

什么是持續集成?

1.Continuous integration(CI)

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

2.沒有持續集成

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

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

3. 如何解決這些問題

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

jenkins下載

jenkins官網https://jenkins.io/zh/

image.png

進入官網進行下載,細心的同學估計已經發現了,下載下來的是一個war包

jenkins啟動

將war包放進tomcat中啟動

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

創建tomcat容器
docker run -itd --name jenkins -p 1888:8080 tomcat:8.5

訪問本機地址:http://localhost:1888/
看到如下界面說明tomct容器創建成功

image.png

啟動jenkins

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

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

舉例:

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

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

image.png

jenkins安裝引導

  • 根據提示:將/root/.jenkins/secrets/initialAdminPassword文件內容復制填寫
  • 這里的目錄當然是指的容器里的路徑
    進入容器
docker exec -it jenkins /bin/bash

進入容器效果圖


image.png

查看文件內容

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

將內容復制出來寫入jenkins引導頁面點繼續
出現如下界面: 選擇"安裝推薦的插件"


image.png

進入如下界面,等待安裝完成


image.png

安裝完成后自動進入如下界面: 點擊"使用admin賬戶繼續"


image.png

出現如下界面點擊:"保存并完成"


image.png

出現如下界面點擊:"開始使用jenkins"


image.png

jenkins引導完成


image.png

jenkins配置操作權限

公開權限(設置任何人有任何權限)


image.png

選擇Anyone can do anything 然后保存


image.png

jenkins配置全局工具

image.png

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


image.png

這里的位置當然也是容器里面的位置了
容器內目前還沒有maven環境
安裝maven

apt-get install maven

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


image.png

將源改為國內站點,這樣下載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敲回車繼續安裝

apt-get install maven

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

mvn -v

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


image.png
image.png

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

apt-get install vim

maven設置國內地址

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

在mirrors標簽下添加如下

<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

配置完成之后點擊保存

創建構建任務

image.png
image.png

點擊保存


image.png

點擊工作區


image.png

這里還不能構建,因為我們還沒有配置SVN項目


image.png
配置SVN項目(假如你已經準備好了SVN的環境,如果沒有請移步本文下方subversion服務安裝)
image.png

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

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

查看docker ip

ipconfig
image.png

也可以通過網絡鏈接查看


image.png
image.png

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

image.png

填寫完成點擊添加


image.png

選擇剛剛添加的憑證


image.png
配置構建
image.png

選擇我們之前配置的maven


image.png

構建命令 clean package

image.png

構建項目

進入myProject任務


image.png

立即構建

  • 藍色:成功
  • 紅色:失敗
  • 灰色:取消的


    image.png

查看構建過程


image.png

控制臺輸出的構建信息


image.png

進入工作區查看構建之后的內容


image.png
image.png

進入target, 構建完成 產生的war包, 到這里我們實現了構建


image.png

部署

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

image.png

安裝 deploy to container插件


image.png

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


image.png
配置構建后的操作(假如你已經有tomcat服務了,否則請移步本文下方:tomcat服務器)
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

執行構建之前查看tomcat8.5容器內的webapps


image.png

點擊構建項目


image.png

構建項目之后, 已經將war包部署上去了

image.png

訪問:http://10.0.17.1:1890/ssm/
完成構建后自動部署

image.png

構建觸發器

填寫token 自己隨便寫


image.png

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

image.png

訪問之后查看jenkins, 正在構建


image.png

現在通過訪問地址就能觸發構建,接下來在svn commit的時候訪問這個地址就能完成自動構建和部署

自動構建

進入svn服務器

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

進入項目hooks

cd /var/local/svn/myProject/hooks

拷貝post-commit.tmpl

docker cp post-commit.tmpl post-commit

將觸發腳本寫入 post-commit 文件

vim post-commit
  • post-commit 文件是SVN內置的,commit之后就會自動執行post-commit文件
    將post-commit 設置為可執行文件
chmod 755 post-commit 

這里的#!/bin/sh 一定不能去掉,否則會導致,不能觸發部署


image.png

修改項目并且提交


image.png

提交成功后開始自動構建


image.png

訪問我們部署的項目,修改內容成功! 以后每次commit都會自動構建部署

image.png

subversion 服務安裝


用svn鏡像創建subversion服務

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

訪問:http://localhost:1889/
如下界面,svn服務端創建完成

image.png

修改apt源為國內的
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 安裝過程中會詢問你是否繼續,輸入Y敲回車繼續安裝

apt-get install vim
在svn上創建一個項目

進入svn容器

docker exec -it svn /bin/bash

進入svn倉庫

cd /var/local/svn/

創建項目倉庫

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

創建一個用戶

vim passwd

在結尾添加如下內容

svn_user = 123456
  • 創建一個用戶:svn_user
  • 密碼:123456


    image.png

設置用戶權限

vim authz

在結尾添加如下內容

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

訪問http://localhost:1889/svn/
如下項目倉庫創建成功

image.png

測試鏈接svn服務

用idea測試鏈接


image.png

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

image.png

雙擊輸入用戶名密碼


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

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


image.png

選擇subversion


image.png

項目變成紅色,已經交給了SVN管理但是還沒有與遠程倉庫同步


image.png

將項目關聯遠程倉庫
右鍵項目跟目錄


image.png

選擇要關聯的遠程倉庫地址


image.png

點擊ok


image.png

完成關聯


image.png

將項目提交到遠程svn倉庫


image.png

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


image.png

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


image.png

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


image.png

提交到遠程倉庫之后沒有顏色了


image.png

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

image.png

tomcat服務器安裝


使用docker安裝tomcat服務

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

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

image.png

更改為國內源

進入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, 安裝過程中會詢問是否繼續,輸入Y敲回車繼續安裝
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
設置IP訪問權限
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

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

版權聲明:原創文章,轉載請注明來源。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,384評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內容