什么是持續集成?
1.Continuous integration(CI)
持續集成是一種軟件開發實踐,即團隊開發成員經常集成他們的工作,通常每個成員至少集成一次,也就意味著每天可能會發生多次集成。每次集成都通過自動化的構建(包括編譯,發布,自動化測試)來驗證,從而盡快地發現集成錯誤。許多團隊發現這個過程可以大大減少集成的問題,讓團隊能夠更快的開發內聚的軟件。
2.沒有持續集成
項目做模塊集成的時候,發現很多接口都不通==>浪費大量時間
需要手動去編譯打包最新的代碼==>構建過程不透明
發布代碼,上線,基本靠手工==>腳本亂飛
摘自https://www.cnblogs.com/jimmy-xuli/p/9020825.html
3. 如何解決這些問題
持續集成是一個理念,落實持續集成我們需要借助工具,如果我們不借助工具的話,很難實現。
jenkins下載
jenkins官網https://jenkins.io/zh/
進入官網進行下載,細心的同學估計已經發現了,下載下來的是一個war包
jenkins啟動
將war包放進tomcat中啟動
這里我們用docker做環境隔離,以免和本機環境沖突,docker的安裝這里就不多做介紹了,大家自行了解
創建tomcat容器
docker run -itd --name jenkins -p 1888:8080 tomcat:8.5
訪問本機地址:http://localhost:1888/
看到如下界面說明tomct容器創建成功
啟動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啟動成功
jenkins安裝引導
- 根據提示:將/root/.jenkins/secrets/initialAdminPassword文件內容復制填寫
- 這里的目錄當然是指的容器里的路徑
進入容器
docker exec -it jenkins /bin/bash
進入容器效果圖
查看文件內容
cat /root/.jenkins/secrets/initialAdminPassword
將內容復制出來寫入jenkins引導頁面點繼續
出現如下界面: 選擇"安裝推薦的插件"
進入如下界面,等待安裝完成
安裝完成后自動進入如下界面: 點擊"使用admin賬戶繼續"
出現如下界面點擊:"保存并完成"
出現如下界面點擊:"開始使用jenkins"
jenkins引導完成
jenkins配置操作權限
公開權限(設置任何人有任何權限)
選擇Anyone can do anything 然后保存
jenkins配置全局工具
配置Maven的settings.xml文件, 選擇“文件系統中的settings文件” ,并填寫settings.xml的位置
這里的位置當然也是容器里面的位置了
容器內目前還沒有maven環境
安裝maven
apt-get install maven
信息如下,提示找不到maven的包
將源改為國內站點,這樣下載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填入全局設置里面
修改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>
配置maven
因為我們用不到git所有刪除git配置,
點擊新增maven 勾掉自動安裝
maven的別名: myMaven
maven的地址: /usr/share/maven
配置jdk
查看java_home
cat $JAVA_HOME
得知JAVA_HOME為/usr/local/openjdk-8
配置完成之后點擊保存
創建構建任務
點擊保存
點擊工作區
這里還不能構建,因為我們還沒有配置SVN項目
配置SVN項目(假如你已經準備好了SVN的環境,如果沒有請移步本文下方subversion服務安裝)
點擊 源碼管理----> 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
也可以通過網絡鏈接查看
添加svn賬號密碼 @HEAD 拉去最新版本的代碼
填寫完成點擊添加
選擇剛剛添加的憑證
配置構建
選擇我們之前配置的maven
構建命令 clean package
構建項目
進入myProject任務
立即構建
- 藍色:成功
- 紅色:失敗
-
灰色:取消的
image.png
查看構建過程
控制臺輸出的構建信息
進入工作區查看構建之后的內容
進入target, 構建完成 產生的war包, 到這里我們實現了構建
部署
deploy to container
部署到容器的插件: deploy to container
tips: 安裝的時候有可能會失敗,多試幾次就可以了
安裝 deploy to container插件
如果這一步失敗的話,多試幾次
配置構建后的操作(假如你已經有tomcat服務了,否則請移步本文下方:tomcat服務器)
配置war包位置及訪問名稱
這里的war包是你打包之后的war包位置, 一般都是在項目的target目錄下,war包名稱直接點擊工作空間下的target看下就知道了,我這里是ssm.war
項目訪問后綴為ssm
選擇部署的容器版本
添加tomcat用戶名密碼
選中添加的用戶
配置tomcat地址 這里的ip于svn同理
執行構建之前查看tomcat8.5容器內的webapps
點擊構建項目
構建項目之后, 已經將war包部署上去了
訪問:http://10.0.17.1:1890/ssm/
完成構建后自動部署
構建觸發器
填寫token 自己隨便寫
根據提示拼接地址: 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
訪問之后查看jenkins, 正在構建
現在通過訪問地址就能觸發構建,接下來在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
現在要做的是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 一定不能去掉,否則會導致,不能觸發部署
修改項目并且提交
提交成功后開始自動構建
訪問我們部署的項目,修改內容成功! 以后每次commit都會自動構建部署
subversion 服務安裝
用svn鏡像創建subversion服務
docker run -itd --name svn -p 1889:80 marvambass/subversion
訪問:http://localhost:1889/
如下界面,svn服務端創建完成
修改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
創建一個用戶
vim passwd
在結尾添加如下內容
svn_user = 123456
- 創建一個用戶:svn_user
-
密碼:123456
image.png
設置用戶權限
vim authz
在結尾添加如下內容
[/]
svn_user = rw
* =
- svn_user = rw:設置svn_user用戶對跟目錄有讀寫權限
- *= :其他用戶沒有權限
訪問http://localhost:1889/svn/
如下項目倉庫創建成功
測試鏈接svn服務
用idea測試鏈接
輸入svn倉庫地址 http://localhost:1889/svn/myProject
雙擊輸入用戶名密碼
將項目上傳到SVN MyProject倉庫中
自己到創建一個maven項目獲取去github上下載一個
將項目交給版本控制工具管理
選擇subversion
項目變成紅色,已經交給了SVN管理但是還沒有與遠程倉庫同步
將項目關聯遠程倉庫
右鍵項目跟目錄
選擇要關聯的遠程倉庫地址
點擊ok
完成關聯
將項目提交到遠程svn倉庫
選擇要提交的文件
.gitignore .idea test 不需要提交, 尤其是test構建的時候有可能會執行單元測試,如果失敗就會影響發布
點擊commit提交到遠程倉庫
這里是警告信息,直接點擊commit
這里是警告信息,直接點擊commit
提交到遠程倉庫之后沒有顏色了
訪問http://localhost:1889/svn/myProject/
tomcat服務器安裝
使用docker安裝tomcat服務
docker run -itd --name tomcat8.5 -p 1890:8080 tomcat:8.5
訪問地址:http://localhost:1890/
效果圖
更改為國內源
進入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" />
設置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" />
重啟容器
docker restart tomcat8.5
訪問:http://localhost:1890
驗證用戶
效果圖: 配置完成
寫作不易,如果文章對您有幫助請給個贊支持下,如有錯誤請指出。謝謝~~
版權聲明:原創文章,轉載請注明來源。