目錄
- 持續集成流程說明:
- 服務器串列
- Java環境安裝
- Git工具安裝
- Maven工具安裝
- Maven阿里云加速
- Tomcat安裝
- GitLab代碼管理倉庫安裝
- Jenkins自動集成工具安裝
- jenkins+Gitlab+tomcat整合
- 三臺服務器進行ssh免密登錄
- Gitlab創建專案
- GitLab部署SSH密鑰
- Jenkins創建任務
- 進入專案中,進行與Jenkins的集成
- 生成測驗專案
- 驗證
- Jenkins的scp報錯
- 方法一
- 方法二
- 驗證
- 自動化部署腳本撰寫
持續集成流程說明:
- 1)首先,開發人員每天進行代碼提交,提交到
Git倉庫 - 2)然后,
Jenkins作為持續集成工具,利用webhook插件檢測GitLab倉庫代碼變動,使用Git工具到Git倉庫拉取代碼到集成服務器,再配合JDK、Maven等軟體完成代碼編譯,代碼測驗與審查,測驗,打包等作業,在這個程序中每一步出錯,都重新再執行一次整個流程, - 3)最后,Jenkins把生成的jar或war包
分發到測驗服務器或者生產服務器,測驗人員或用戶就可以訪問

服務器串列
| 服務器IP | 服務器資訊 | 備注 |
|---|---|---|
| 192.168.1.10 | 4G記憶體、可聯網 | Gitlab、Git、Maven、JDK |
| 192.168.1.20 | 4G記憶體、可聯網 | Jenkins、Git、Maven、JDK |
| 192.168.1.30 | 4G記憶體、可聯網 | Tomcat、JDK |
Java環境安裝
tar -zxf jdk-8u201-linux-x64.tar.gz
mv jdk1.8.0_201 /usr/local/java
vim /etc/profile
#末尾添加
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
#保存瑞出
source /etc/profile
java -version #安裝成功,jdk版本資訊
Git工具安裝
yum -y install git
Maven工具安裝
tar -zxf apache-maven-3.6.0-bin.tar.gz
mv apache-maven-3.6.0 /usr/local/maven
vim /etc/profile
#末尾添加
export PATH=$PATH:/usr/local/maven/bin
#保存退出
source /etc/profile
mvn -v #安裝成功,maven版本資訊
Maven阿里云加速
find / -type f -name settings.xml
vim /usr/local/maven/conf/settings.xml
157 </mirror>
158 -->
159 <mirror>
160 <id>aliyun maven</id>
161 <name>aliyun</name>
162 <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
163 <mirrorOf>central</mirrorOf> # 代表本機去中央倉庫的請求攔截,讓阿里云來處理
164 </mirror>
165 </mirrors>
Tomcat安裝
tar -zxf apache-tomcat-8.5.42.tar.gz
mv apache-tomcat-8.5.42 /usr/local/tomcat
/usr/local/tomcat/bin/startup.sh
`啟動`:/usr/local/tomcat/bin/startup.sh
`停止`:/usr/local/tomcat/bin/shutdown.sh
`查看日志`: tail -f /usr/local/tomcat/logs/catalina.out
GitLab代碼管理倉庫安裝
詳細安裝步驟鏈接👈
Jenkins自動集成工具安裝
詳細安裝步驟鏈接👈
jenkins+Gitlab+tomcat整合
三臺服務器進行ssh免密登錄
192.168.1.10 由于剛才已經與gitlab進行sshd密鑰部署,就不重新獲取了
ssh-copy-id -i 192.168.1.20
ssh-copy-id -i 192.168.1.30
192.168.1.20
ssh-keygen
ssh-copy-id -i 192.168.1.10
ssh-copy-id -i 192.168.1.30
192.168.1.30
ssh-keygen
ssh-copy-id -i 192.168.1.10
ssh-copy-id -i 192.168.1.20
Gitlab創建專案

GitLab部署SSH密鑰
gitlab服務器獲取密鑰
ssh-keygen #回車
查看公鑰

進入gitlab頁面進行設定密鑰

Jenkins創建任務
記得安裝maven插件、gitlab webhook插件
沒有maven插件不能創建maven專案
沒有gitlab webhook插件,不能檢測gitlab倉庫代碼變動實作自動計劃
新建maven專案


原始碼管理
復制GitLab中game-of-life專案的SSH地址


報錯:無法進行鏈接
添加憑證

查看gitlab服務器上的密鑰


選擇剛才創建的憑證

構建觸發器
選擇當GitLab的專案中代碼變化時,Jenkins進行構建任務
圖中的URL是在GitLab的設定中需要使用的

點擊觸發器中的“高級”,生成一串token值,用于GitLab與Jenkins集成使用

Build
執行構建時,對專案進行打包

Post Steps
當構建運行成功后,將jar包傳送到tomcat主機的tomcat網頁根目錄下自動部署
scp /var/lib/jenkins/workspace/game/gameoflife-web/target/*.war root@192.168.1.30:/usr/local/tomcat/webapps/

構建后操作
設定過郵箱的話,這里可以設定構建全部結束后,給你發送郵件

無論最終構建成功/失敗/不穩定都將發送郵件

進入專案中,進行與Jenkins的集成

這里的URL和token值就是在Jenkins的任務配置時,構建觸發器



生成測驗專案
gitlab服務器拖入專案包,進行上傳代碼
上傳代碼成功后,jenkins自動化任務就會進行執行
[root@localhost ~]# tar -zxf game-of-lift.tar.gz
[root@localhost ~]# cd game-of-life/
[root@localhost game-of-life]# git init
重新初始化現存的 Git 版本庫于 /root/game-of-life/.git/
[root@localhost game-of-life]# git add .
[root@localhost game-of-life]# git config --global user.email "zidingyi@gmail.com"
[root@localhost game-of-life]# git config --global user.name "zidingyi"
[root@localhost game-of-life]# git commit -m "game"
# 位于分支 master
無檔案要提交,干凈的作業區
[root@localhost game-of-life]# git remote add game git@192.168.1.10:root/game.git
[root@localhost game-of-life]# git push -u game master
Counting objects: 7496, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2292/2292), done.
Writing objects: 100% (7496/7496), 17.34 MiB | 24.45 MiB/s, done.
Total 7496 (delta 4659), reused 7496 (delta 4659)
remote: Resolving deltas: 100% (4659/4659), done.
To git@192.168.1.10:root/game.git
* [new branch] master -> master
分支 master 設定為跟蹤來自 game 的遠程分支 master,
驗證
這個時候Tomcat的webapps目錄下已經有了專案的war包并且已經編譯解壓好了
[root@localhost ~]# ls /usr/local/tomcat/webapps/*.war
/usr/local/tomcat/webapps/gameoflife.war
可以直接訪問http://192.168.1.30:8080/gameoflife
Jenkins的scp報錯
方法一
登錄到Jenkins查看終端輸出是否成功

報錯:主機密鑰驗證失敗,使用scp命令也執行失敗,這是因為Jenkins頁面執行的命令是通過jenkins用戶來執行的,所以免密登錄應該給jenkins來做
解決Jenkins的scp問題,安裝Jenkins會默認創建jenkins用戶,現在切換到jenkins用戶
[root@jenkins ~]# su jenkins
[root@jenkins ~]#
發現用戶并沒有變,也沒有報錯
查看jenkins的運行環境,cat /etc/passwd | grep jenkins,它的運行環境默認是/bin/false
jenkins:x:988:982:Jenkins Automation Server:/var/lib/jenkins:/bin/false
將環境改為bash
現在切換jenkins
[root@jenkins ~]# su jenkins
bash-4.2$
出現bash-4.2$因為這個用戶沒有home目錄
vim /root/.bash_profile
# 最后一行添加
export PS1='[\u@\h \W]\$ '
# 這個就是普通用戶登錄后的命令列提示符[root@jenkins~]#
source /root/.bash_profile
設定jenkins不使用密碼
visudo
# 在最后一行添加
jenkins ALL=(ALL)NOPASSWD: ALL
生成jenkins的密鑰對
[root@jenkins~]#su jenkins
[jenkins@jenkinsroot]$ssh-keygen
[jenkins@jenkinsroot]$ssh-copy-id -i root@192.168.1.30
方法二
使用root運行
vim /etc/sysconfig/jenkins
# 修改jenkins用戶
JENKINS_USER="jenkins" # 修改為root
驗證
在GitLab上模擬代碼變化

這個時候就可以scp成功了

這個時候Tomcat的webapps目錄下已經有了專案的war包并且已經編譯解壓好了
[root@localhost ~]# ls /usr/local/tomcat/webapps/*.war
/usr/local/tomcat/webapps/gameoflife.war
可以直接訪問http://192.168.1.30:8080/gameoflife
自動化部署腳本撰寫
Jenkins
vim /tmp/autoscp.sh
# 添加
#!/bin/bash
WARFILE=/var/lib/jenkins/workspace/game/gameoflife-web/target/gameoflife.war
scp $WARFILE root@192.168.1.30:/tmp
ssh root@192.168.1.30 /tmp/deploy.sh
chmod +x /tmp/autoscp.sh
Tomcat
vim /tmp/deploy.sh
# 添加
#!/bin/bash
DAY=/backup/$(date +%Y%m%d)
HOUR=$DAY/$(date +%H%M%S)
APPBASE=/usr/local/tomcat/webapps/gameoflife
WAR=/tmp/gameoflife.war
[ -d /backup ] || mkdir /backup
[ -d $DAY ] || mkdir $DAY
if [ -d $APPBASE ]
then
mkdir $HOUR
mv $APPBASE/* $HOUR
fi
unzip $WAR -d $APPBASE
chmod +x /tmp/deploy.sh
將Jenkins中專案的構建時執行的shell部分改為執行腳本

這個時候Tomcat的tmp目錄下已經有了專案的war包
ls /tmp/*.war
tmp/gameoflife.war
并且也已經解壓完成根據腳本的操作自動部署到了Tomcat主機
訪問http://192.168.1.30:8080/gameoflife
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/263741.html
標籤:其他
上一篇:遠程訪問及控制(詳解)——SSH遠程管理及TCP Wrappers 訪問控制
下一篇:Redis一鍵部署腳本
