Jenkins+Maven+Gitee自動化部署Springboot項目


CICD介紹

CICD可以理解為管道,一個自動化流程,用於實現應用開發中的高度持續自動化和持續監控

持續集成(CI)

CI指持續集成,它屬於開發人員的自動化流程,成功的CI說明新的代碼會定期或手動構建、測試並合並到共享存儲庫中,可以有效解決由於分支過多而導致相互沖突的問題

持續交付、持續部署(CD)

CD指持續交付、持續部署,持續交付指開發人員將代碼變更后會自動進行測試然后上傳到共享存儲庫,然后由運維部署到生產環境中;持續部署指自動將變更的代碼從共享存儲庫發布到生產環境。二者通常交叉使用,也可以單獨使用,主要取決於自動化程度

工廠里的生產線以快速、可重復、自動化的方式將原材料生產為消費品,軟件交付也是同樣的道理,而如何完成這項工作的總體設計就是持續交付(CD),啟動生產線的過程就是持續集成(CI),將最終產品提供給客戶的過程就是持續部署(CD)

Git安裝

執行安裝命令

yum install git -y

驗證Git,查看版本

git --version

image-20210206162251864

JDK安裝

執行命令java -version,查看系統是否已安裝並配置jdk,若未安裝請點擊此處查看文章JDK安裝步驟

image-20210205213201817

Maven安裝

在線安裝:通過華為源下載

wget https://repo.huaweicloud.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

image-20210206153901350

離線安裝:點擊此處進入官方下載頁面,或者在國內源下載

image-20210206153420965

將下載包上傳到系統中,然后進行配置

解壓下載包

tar -zxvf apache-maven-3.6.3-bin.tar.gz

image-20210206154343689

編輯vim /etc/profile文件,添加Maven環境變量

export MAVEN_HOME=maven路徑
export PATH=$MAVEN_HOME/bin:$PATH

image-20210206160905768

重新加載配置,執行命令. /etc/profile

驗證Maven配置,執行命令mvn -version

image-20210206161125705

創建一個目錄,做為Maven倉庫,並修改為華為源

mkdir apache-maven-3.6.3/repository
vim apache-maven-3.6.3/conf/settings.xml

修改以下信息

<!--本地倉庫-->          
 <localRepository>apache-maven-3.6.3/repository</localRepository>

<!--華為源-->
<mirror>
    <id>huaweicloud</id>
    <mirrorOf>*</mirrorOf>
    <url>https://repo.huaweicloud.com/repository/maven/</url>
</mirror>

image-20210206190721483

image-20210206190444511

Jenkins安裝

在線安裝:由於網絡限制,建議使用國內鏡像站下載

wget https://repo.huaweicloud.com/jenkins/war/版本/jenkins.war

在線安裝

離線安裝:點擊此處進入官方下載頁面,建議下載LTS長期支持版,復制鏈接地址使用迅雷等工具進行下載

離線下載

將下載的war包上傳到系統中

image-20210206134118201

啟動Jenkins

nohup java -jar jenkins.war --httpPort=8888 > jenkins.log 2>&1 &

使用tail -f jenkins.log命令查看輸出日志,獲取Jenkins密碼並記錄Jenkins密鑰

*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

d9ad78c6be5345b4837194ea91d934b0

This may also be found at: /root/.jenkins/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

開放端口供外網訪問,或者直接關閉防火牆

# 開啟防火牆8888端口
firewall-cmd --zone=public --add-port=8888/tcp --permanent
# 關閉防火牆並禁止開機自啟
systemctl stop firewalld && systemctl disable firewalld

瀏覽器訪問地址http://192.168.107.132:8888/,耐心等待進入以下頁面,然后輸入日志中復制的密碼

訪問jenkins

image-20210206131002450

image-20210206131357196

image-20210206135841093

然后點擊【保存並完成】→【開始使用Jenkins】,進入Jenkins歡迎頁面

image-20210208102514979

常用插件安裝

修改源

由於是國外網址,插件下載太慢,所以先更換一下安裝源

依次點擊【Maanage Jenkins】→【Manage Plugins】→【Advanced】,划到最下面修改升級站點URL

https://repo.huaweicloud.com/jenkins/updates/update-center.json

image-20210206141546074

修改服務器配置,先找到Jenkins的安裝目錄,因其是隱藏目錄,可以通過查找命令find / -name ".jenkins"找到安裝路徑,編輯updates目錄下default.json文件

image-20210206142638569

先切換到updates目錄下,然后執行修改文件的命令

cd /root/.jenkins/updates/
sed -i 's/http:\/\/updates.jenkinsci.org\/download/https:\/\/repo.huaweicloud.com\/jenkins/g' default.json
sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

image-20210206144940983

重啟Jenkins,直接通過瀏覽器訪問地址重啟

http://192.168.107.132:8888/restart

image-20210206145331202

插件安裝

在安裝時選擇推薦插件,已經把常用的插件安裝成功,可以在已安裝列表中查看

image-20210206151529984

未安裝的插件在【可選插件】中搜索,然后勾選要安裝的插件,點擊【直接安裝】

例如:SonarQube Scanner插件,安裝后可以執行 sonar scanner 指令,跑 CI 時檢查代碼質量

image-20210206151142313

點擊【直接安裝】后會進入安裝頁面,在此頁面勾選“安裝完成后重啟Jenkins(空閑時)”,如果頁面長時間等待,可能已成功安裝,請手動刷新頁面

image-20210206151218879

基礎配置

jdk配置

依次點擊【Manage Jenkins】→【Global Tool Configuration】,找到JDK,點擊【新增JDK】

image-20210206163933228

出現黃色提示說明配置有問題,路徑有誤,Jenkins未找到

image-20210206163637591

Git配置

在【Global Tool Configuration】頁面找到Git,默認已經填寫,可以重命名操作

image-20210206164405021

出現下圖提示說明配置有誤

image-20210206164311872

Maven配置

在【Global Tool Configuration】頁面找到Maven

image-20210206165028966

同樣下圖提示說明路徑有誤

image-20210206165117332

最后點擊【保存】

憑據配置

依次點擊【Manage Jenkins】→【Manage Credentials】,點擊【全局】→【添加憑據】,或者進入全局詳情頁添加憑據

image-20210206171857612

image-20210206172004110

  • 常用憑據類型

    Username with password:用戶名和密碼

    SSH Username with private key:使用SSH用戶和密鑰

下面以使用Git工具到碼雲拉取項目源碼為例,演示Jenkins的如何管理碼雲的憑證

對接碼雲Gitee

添加碼雲Gitee憑據

image-20210206175115601

image-20210206175255186

新建一個碼雲倉庫

image-20210206181403649

此倉庫內有兩個README文件,復制倉庫地址

image-20210206181554737

然后測試憑據是否能正常使用

【新建Item】→【Freestyle project】,輸入任務名稱,點擊【確定】

image-20210206182201727

找到源碼管理,點擊Git,URL中輸入復制的倉庫地址,Credentials選擇已添加的碼雲憑據

image-20210206182614140

因為倉庫是私有的,所以必須要有憑據,否則無法連接到倉庫,就會報錯

image-20210206182403958

保存任務,點擊【Build Now】,立即構建,查看構建日志

image-20210206183038093

通過日志輸出結果可以看出構建成功

image-20210206182919205

查看Jenkins的工作空間目錄可以看到已成功將文件拉取下來

image-20210206183450761

至此說明用戶名和密碼類型的憑證已經生效

Springboot小項目發布

引用服務器規划

由於Jenkins構建消耗內存很大,此處再創建一個虛擬機,有條件可以直接開通阿里雲的ECS,就更像公司的部署情況啦!哈哈

應用服務器信息

  • IP:192.168.107.133
  • JDK:1.8 (安裝步驟請查看此文章)
  • 部署路徑:/project/backup/dyd-jenkins-test/
  • 端口:8088
配置SSH免密登錄

在Jenkins服務器上生成密鑰

ssh-keygen -t rsa
# 然后直接回車三次

執行后會生成.ssh目錄,生成兩個文件

  • id_rsa : 生成的私鑰文件
  • id_rsa.pub : 生成的公鑰文件

image-20210207160507690

接下來需要將公鑰導入到認證文件中

cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

image-20210207160556674

ssh公鑰生效需滿足至少下面兩個條件:

  • .ssh目錄的權限必須是700
  • .ssh/authorized_keys文件權限必須是600

給文件授權

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

image-20210207161813959

將authorized_keys文件拷貝到應用服務器192.168.107.133的.ssh目錄下

# 先在應用服務器(192.168.107.133)上創建/.ssh目錄
mkdir /root/.ssh
# 在jenkins服務器(192.168.107.132)上將pub公鑰文件拷貝到應用服務器的.ssh目錄下,並命名為authorized_keys
scp -p /root/.ssh/id_rsa.pub root@192.168.107.133:/root/.ssh/authorized_keys

image-20210207160750138

image-20210207160814409

然后再給應用服務器192.168.107.133上的.ssh和.ssh/authorized_keys授權

chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys

image-20210207154545157

在Jenkins服務器192.168.107.132上進行免密連接測試

# 在jenkins服務器的任意目錄下創建test文件,並拷貝到應用服務器
touch /root/test
scp -p test root@192.168.107.133:/root/test
# 進入到應用服務器(192.168.107.133),檢查目錄下是否出現test
# 在Jenkins服務器上使用ssh進行免密連接測試,成功連接如下圖所示,如果還需要輸入密碼,說明配置失敗,請檢查
ssh root@192.168.107.133
# 驗證后使用exit退出遠程連接
exit

image-20210207161155067

至此免密登錄和實現免密拷貝成功

創建任務

先使用腳手架寫一個超簡單的小項目,或者網上找個項目

image-20210208122449586

先確保本地能夠成功訪問

image-20210207174308761

然后通過Git將小項目上傳到碼雲

image-20210206200902502

創建一個Maven項目,若不存在此選項,請在插件中搜索maven,然后安裝Maven

image-20210206201719604

配置Git,填寫碼雲上復制的項目地址和碼雲憑據

image-20210207174601938

配置Pro Steps,POM默認已存在,無需更改,操作填寫clean package -U -Dmaven.test.skip=true

image-20210207174758847

配置Post Stops,選擇執行Shell

image-20210206202949621

編寫Jenkins發布腳本

#!/bin/bash

echo "部署的目錄和項目名稱"
DIR="/project"
projectName="dyd-jenkins-test"

echo "待部署的應用服務器"
server_ips="192.168.107.133"
for server_ip in ${server_ips[@]}
do

echo "ssh連接並進行備份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mkdir -p $DIR/backup/${projectName}
if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
  mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar 
fi
EOF

echo "拷貝jar包到目標服務器的tmp目錄下"
scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/${projectName}.jar

echo "ssh遠程連接進行發布操作"
ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mv /tmp/${projectName}.jar $DIR/backup/${projectName}/${projectName}.jar

EOF

done

echo "success"

將腳本代碼粘貼到Execute shell框中,然后點擊【應用】【保存】

image-20210207183230692

執行構建任務,

點擊【Build Now】,立即構建,查看控制台輸出,首次構建有下載任務,構建時間可能會很長,請耐心等待

image-20210207183734980

image-20210207095031597

image-20210207173232152

構建成功后啟動項目

image-20210207172906486

通過瀏覽器訪問驗證項目,可以看到項目已成功啟動

image-20210207172837344

自動啟停項目

通過上面操作可以看到任務構建成功后,每次還需要手動啟停,所以需要一些自動啟停的shell腳本

編寫應用啟動腳本

在/project/backup/dyd-jenkins-test目錄下創建啟動腳本

vim start.sh

將下面的代碼粘貼到start.sh文件中

#!/bin/bash
set -e #一旦報錯立即停止
set -o pipefail

# 添加JDK路徑
JAVA_HOME=/usr/java/jdk1.8.0_281-amd64

APP_ID=dyd-jenkins-test
APP_DIR="/project"

nohup $JAVA_HOME/bin/java -jar ${APP_DIR}/backup/${APP_ID}/${APP_ID}.jar > release_out.log 2>&1 &
start_ok=false
if [[ $? = 0 ]];then
        sleep 5
        tail -n 100 release_out.log
fi
dyd=`grep "Started" release_out.log | awk '{print $1}'`
if [[ -n "${dyd}" ]];then
    echo "應用程序啟動成功"
    exit 0
else
    echo "應用程序啟動失敗"
    exit 1
fi

運行腳本看是否能夠成功啟動應用

# 切換到項目目錄下
cd /project/backup/dyd-jenkins-test
# 執行shell命令
sh start.sh
# 或者執行命令時直接加上路徑
sh /project/backup/dyd-jenkins-test/start.sh
# 然后查看日志
tail -f release_out.log

image-20210207215702758

通過瀏覽器訪問成功

image-20210207213727428

編寫停止應用腳本

在/project/dyd-jenkins-test目錄下創建停止腳本

vim stop.sh

將下面的代碼粘貼到stop.sh文件中

#!/bin/bash

APP_ID=dyd-jenkins-test
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh

運行腳本看是否能夠成功停止應用運行

# 切換到項目目錄下
cd /project/backup/dyd-jenkins-test
# 執行shell命令
sh stop.sh
# 或者執行命令時直接加上路徑
sh /project/backup/dyd-jenkins-test/stopt.sh

image-20210207215833019

通過瀏覽器訪問失敗

image-20210207215926862

啟停腳本驗證通過后,將下述啟停代碼加到上面Jenkins的發布腳本中

sh $DIR/backup/${projectName}/stop.sh
sh $DIR/backup/${projectName}/start.sh

image-20210207221152113

構建任務,查看控制台輸出日志可以項目啟動成功

image-20210207232057116

項目變更后重新構建發布

先修改一下小項目,然后同步到碼雲

image-20210207232603048

image-20210207232744309

再次構建項目

日志中可以看到commit信息,並構建發布成功

image-20210207232935874

image-20210207233019630

通過瀏覽器訪問可以看到最新的內容

image-20210207233117989

OK!先寫這么多吧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM