CICD介紹
CICD可以理解為管道,一個自動化流程,用於實現應用開發中的高度持續自動化和持續監控
持續集成(CI)
CI指持續集成,它屬於開發人員的自動化流程,成功的CI說明新的代碼會定期或手動構建、測試並合並到共享存儲庫中,可以有效解決由於分支過多而導致相互沖突的問題
持續交付、持續部署(CD)
CD指持續交付、持續部署,持續交付指開發人員將代碼變更后會自動進行測試然后上傳到共享存儲庫,然后由運維部署到生產環境中;持續部署指自動將變更的代碼從共享存儲庫發布到生產環境。二者通常交叉使用,也可以單獨使用,主要取決於自動化程度
工廠里的生產線以快速、可重復、自動化的方式將原材料生產為消費品,軟件交付也是同樣的道理,而如何完成這項工作的總體設計就是持續交付(CD),啟動生產線的過程就是持續集成(CI),將最終產品提供給客戶的過程就是持續部署(CD)
Git安裝
執行安裝命令
yum install git -y
驗證Git,查看版本
git --version
JDK安裝
執行命令java -version
,查看系統是否已安裝並配置jdk,若未安裝請點擊此處查看文章JDK安裝步驟
Maven安裝
在線安裝:通過華為源下載
wget https://repo.huaweicloud.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
離線安裝:點擊此處進入官方下載頁面,或者在國內源下載
將下載包上傳到系統中,然后進行配置
解壓下載包
tar -zxvf apache-maven-3.6.3-bin.tar.gz
編輯vim /etc/profile
文件,添加Maven環境變量
export MAVEN_HOME=maven路徑
export PATH=$MAVEN_HOME/bin:$PATH
重新加載配置,執行命令. /etc/profile
驗證Maven配置,執行命令mvn -version
創建一個目錄,做為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>
Jenkins安裝
在線安裝:由於網絡限制,建議使用國內鏡像站下載
wget https://repo.huaweicloud.com/jenkins/war/版本/jenkins.war
離線安裝:點擊此處進入官方下載頁面,建議下載LTS長期支持版,復制鏈接地址使用迅雷等工具進行下載
將下載的war包上傳到系統中
啟動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】,進入Jenkins歡迎頁面
常用插件安裝
修改源
由於是國外網址,插件下載太慢,所以先更換一下安裝源
依次點擊【Maanage Jenkins】→【Manage Plugins】→【Advanced】,划到最下面修改升級站點URL
https://repo.huaweicloud.com/jenkins/updates/update-center.json
修改服務器配置,先找到Jenkins的安裝目錄,因其是隱藏目錄,可以通過查找命令find / -name ".jenkins"
找到安裝路徑,編輯updates目錄下default.json文件
先切換到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
重啟Jenkins,直接通過瀏覽器訪問地址重啟
http://192.168.107.132:8888/restart
插件安裝
在安裝時選擇推薦插件,已經把常用的插件安裝成功,可以在已安裝列表中查看
未安裝的插件在【可選插件】中搜索,然后勾選要安裝的插件,點擊【直接安裝】
例如:SonarQube Scanner插件,安裝后可以執行 sonar scanner
指令,跑 CI 時檢查代碼質量
點擊【直接安裝】后會進入安裝頁面,在此頁面勾選“安裝完成后重啟Jenkins(空閑時)”,如果頁面長時間等待,可能已成功安裝,請手動刷新頁面
基礎配置
jdk配置
依次點擊【Manage Jenkins】→【Global Tool Configuration】,找到JDK,點擊【新增JDK】
出現黃色提示說明配置有問題,路徑有誤,Jenkins未找到
Git配置
在【Global Tool Configuration】頁面找到Git,默認已經填寫,可以重命名操作
出現下圖提示說明配置有誤
Maven配置
在【Global Tool Configuration】頁面找到Maven
同樣下圖提示說明路徑有誤
最后點擊【保存】
憑據配置
依次點擊【Manage Jenkins】→【Manage Credentials】,點擊【全局】→【添加憑據】,或者進入全局詳情頁添加憑據
-
常用憑據類型
Username with password:用戶名和密碼
SSH Username with private key:使用SSH用戶和密鑰
下面以使用Git工具到碼雲拉取項目源碼為例,演示Jenkins的如何管理碼雲的憑證
對接碼雲Gitee
添加碼雲Gitee憑據
新建一個碼雲倉庫
此倉庫內有兩個README文件,復制倉庫地址
然后測試憑據是否能正常使用
【新建Item】→【Freestyle project】,輸入任務名稱,點擊【確定】
找到源碼管理,點擊Git,URL中輸入復制的倉庫地址,Credentials選擇已添加的碼雲憑據
因為倉庫是私有的,所以必須要有憑據,否則無法連接到倉庫,就會報錯
保存任務,點擊【Build Now】,立即構建,查看構建日志
通過日志輸出結果可以看出構建成功
查看Jenkins的工作空間目錄可以看到已成功將文件拉取下來
至此說明用戶名和密碼類型的憑證已經生效
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 : 生成的公鑰文件
接下來需要將公鑰導入到認證文件中
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
ssh公鑰生效需滿足至少下面兩個條件:
- .ssh目錄的權限必須是700
- .ssh/authorized_keys文件權限必須是600
給文件授權
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
將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
然后再給應用服務器192.168.107.133上的.ssh和.ssh/authorized_keys授權
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
在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
至此免密登錄和實現免密拷貝成功
創建任務
先使用腳手架寫一個超簡單的小項目,或者網上找個項目
先確保本地能夠成功訪問
然后通過Git將小項目上傳到碼雲
創建一個Maven項目,若不存在此選項,請在插件中搜索maven,然后安裝Maven
配置Git,填寫碼雲上復制的項目地址和碼雲憑據
配置Pro Steps,POM默認已存在,無需更改,操作填寫clean package -U -Dmaven.test.skip=true
配置Post Stops,選擇執行Shell
編寫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框中,然后點擊【應用】【保存】
執行構建任務,
點擊【Build Now】,立即構建,查看控制台輸出,首次構建有下載任務,構建時間可能會很長,請耐心等待
構建成功后啟動項目
通過瀏覽器訪問驗證項目,可以看到項目已成功啟動
自動啟停項目
通過上面操作可以看到任務構建成功后,每次還需要手動啟停,所以需要一些自動啟停的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
通過瀏覽器訪問成功
編寫停止應用腳本
在/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
通過瀏覽器訪問失敗
啟停腳本驗證通過后,將下述啟停代碼加到上面Jenkins的發布腳本中
sh $DIR/backup/${projectName}/stop.sh
sh $DIR/backup/${projectName}/start.sh
構建任務,查看控制台輸出日志可以項目啟動成功
項目變更后重新構建發布
先修改一下小項目,然后同步到碼雲
再次構建項目
日志中可以看到commit信息,並構建發布成功
通過瀏覽器訪問可以看到最新的內容
OK!先寫這么多吧