??Jenkins是一個開源的、提供友好操作界面的持續(xù)集成(CI)工具裆赵,起源于Hudson(Hudson是商用的)东囚,主要用于持續(xù)、自動的構(gòu)建/測試軟件項目战授、監(jiān)控外部任務(wù)的運行∫吃澹現(xiàn)記錄一下本人使用jenkins+gitee在當前和遠程服務(wù)器自動構(gòu)建一個springboot項目,并使用docker打包成鏡像進行部署植兰,廢話不多說份帐,開搞
擁有一臺服務(wù)器,本人使用的是阿里云的linux的服務(wù)器楣导。服務(wù)器安裝Docker,Maven,Git,Jenkins,JDK并配置好環(huán)境變量
Jenkins安裝參考:https://blog.csdn.net/quwujin/article/details/112533165
Git安裝參考:https://www.cnblogs.com/zhi-leaf/p/10978538.html
Maven安裝參考:https://www.cnblogs.com/zhi-leaf/p/6323081.html
JDK安裝參考:https://www.cnblogs.com/zhi-leaf/p/10315125.html
Docker安裝參考: https://blog.csdn.net/z1353095373/article/details/107102745-
將自己的springboot項目push到gitee倉庫废境,拿到項目的url
gitee-1.png
- Jenkins配置
(1) 服務(wù)器Jenkins安裝好之后,在瀏覽器訪問服務(wù)器ip:(jenkins端口號)筒繁,出現(xiàn)以下界面
jenkins-1.png
輸入cat /var/lib/jenkins/secrets/initialAdminPassword
獲取密碼噩凹,復(fù)制粘貼到管理員密碼,點擊繼續(xù)
(2) 之后出現(xiàn)下面的界面毡咏,選擇安裝推薦的插件或者選擇插件來安裝都可以驮宴,需要的插件可以在配置完jenkins后在自行下載
jenkins-2.png
(3) 插件安裝完以后,出現(xiàn)創(chuàng)建管理員的界面呕缭,依次操作就好
jenkins-3.png
jenkins-4.png
jenkins-5.png
(4)配置完成后堵泽,可以看到j(luò)enkins的功能界面,下圖是我已經(jīng)創(chuàng)建過兩個任務(wù)
jenkins-6.png
4.jenkins插件的安裝
(1) 安裝插件的路徑
(2) 需要安裝的插件
Git 插件:拉取代碼
Gitee 插件: 開啟webhook恢总,push代碼后自動構(gòu)建迎罗,下面會講配置過程
Maven Integration plugin 插件:maven打包
Publish Over SSH 插件:遠程服務(wù)器連接
(3)工具環(huán)境配置
配置JDK
配置git
配置maven
對應(yīng)的*_HOME在環(huán)境變量中都可查看
vim /etc/profile
(4) 配置ssh
拉到最下面
-
創(chuàng)建任務(wù)
(1)在jenkins主頁面,點擊New Item創(chuàng)建一個新任務(wù)
5-1.png
(2)配置git
5-2.png
(3)配置gitee,
5-3.png
5-4.png
復(fù)制url和密碼片仿,打開gitee倉庫佳谦,在管理 - WebHooks - 添加webHook,將url和密碼填入對應(yīng)的輸入框
5-5.png
(4) 配置maven
5-6.png
(5) 如果是將項目部署到j(luò)enkins所在的服務(wù)器(不需要看6),腳本自行百度搜索編寫,貼出我自己的
#操作/項目路徑(Dockerfile存放的路勁)
BASE_PATH=/home/project
# 源jar路徑
SOURCE_PATH=/var/lib/jenkins/workspace
#項目名稱
PROJECT_NAME= xxx
#docker 鏡像/容器名字或者jar名字 這里都命名為這個
SERVER_NAME= xxx
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#鏡像id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
DATE=`date +%Y%m%d%H%M`
# 最新構(gòu)建代碼 移動到項目環(huán)境
function transfer(){
echo "最新構(gòu)建代碼 $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar 遷移至 $BASE_PATH ...."
cp $SOURCE_PATH/$PROJECT_NAME/$SERVER_NAME/target/$SERVER_NAME-1.0-SNAPSHOT.jar $BASE_PATH/$SERVER_NAME.jar
echo "遷移完成"
}
# 備份
function backup(){
if [ -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
echo "$SERVER_NAME.jar 備份..."
cp $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
echo "備份 $SERVER_NAME.jar 完成"
else
echo "$BASE_PATH/$SERVER_NAME.jar不存在滋戳,跳過備份"
fi
}
# 構(gòu)建docker鏡像
function build(){
#清除舊容器
if [ -n "$CID" ]; then
echo "存在$SERVER_NAME容器,CID=$CID"
echo "停止舊容器"
docker stop $SERVER_NAME
echo "刪除舊容器"
docker rm $SERVER_NAME
fi
# 清楚舊鏡像
if [ -n "$IID" ]; then
echo "存在$SERVER_NAME鏡像啥刻,IID=$IID"
echo "刪除鏡像"
docker rmi $IID
fi
#構(gòu)建鏡像
echo "開始構(gòu)建鏡像"
cd $BASE_PATH
docker build -t $SERVER_NAME .
echo "構(gòu)建鏡像成功!"
# 運行docker容器
echo "創(chuàng)建并啟動$SERVER_NAME容器..."
docker run --name $SERVER_NAME -v $BASE_PATH:$BASE_PATH -d -p 8085:8085 $SERVER_NAME
echo "$SERVER_NAME容器啟動完成"
}
# 運行docker容器
function run(){
backup
transfer
build
}
#入口
run
(6) 如果是部署到遠程服務(wù)器(5可略過)
我自己將maven打包出來的jar包傳輸?shù)竭h程服務(wù)器的/home/source下面并將/home/source下的.jar復(fù)制到/home/project中(jenkins.sh)中實現(xiàn).
/home/project添加兩個文件奸鸯,一個jenkins.sh腳本,一個DockerFile文件可帽,構(gòu)建成功將文件傳輸?shù)竭h程服務(wù)器娄涩,會執(zhí)行jenkins.sh腳本
cd /home/project
sh jenkins.sh
下面貼出我的兩個文件,僅供參考
DockerFile文件:
#基礎(chǔ)鏡像
FROM openjdk:8-jdk-alpine
#鏡像制作人
MAINTAINER yjy
VOLUME /tmp
ADD ./mall.jar mall.jar
#暴露運行的端口號
EXPOSE 8085
#執(zhí)行jar包
ENTRYPOINT ["java","-jar","mall.jar"]
jenkins.sh文件
#操作/項目路徑(Dockerfile存放的路勁)
BASE_PATH=/home/project
# 源jar路徑
SOURCE_PATH=/home/source
#docker 鏡像/容器名字或者jar名字 這里都命名為這個
SERVER_NAME=mall
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#鏡像id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
DATE=`date +%Y%m%d%H%M`
function transfer(){
echo "最新構(gòu)建代碼 $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar 遷移至 $BASE_PATH ...."
cp $SOURCE_PATH/$SERVER_NAME-1.0-SNAPSHOT.jar $BASE_PATH/$SERVER_NAME.jar
echo "遷移完成"
}
# 構(gòu)建docker鏡像
function build(){
#清除舊容器
if [ -n "$CID" ]; then
echo "存在$SERVER_NAME容器,CID=$CID"
echo "停止舊容器"
docker stop $SERVER_NAME
echo "刪除舊容器"
docker rm $SERVER_NAME
fi
# 清楚舊鏡像
if [ -n "$IID" ]; then
echo "存在$SERVER_NAME鏡像蓄拣,IID=$IID"
echo "刪除鏡像"
docker rmi $IID
fi
#構(gòu)建鏡像
echo "開始構(gòu)建鏡像"
cd $BASE_PATH
docker build -t $SERVER_NAME .
echo "構(gòu)建鏡像成功!"
# 運行docker容器
echo "創(chuàng)建并啟動$SERVER_NAME容器..."
docker run --name $SERVER_NAME -v $BASE_PATH:$BASE_PATH -d -p 8085:8085 $SERVER_NAME
echo "$SERVER_NAME容器啟動完成"
}
# 運行docker容器
function run(){
transfer
build
}
#入口
run
-
開始構(gòu)建
6-1.png