一妓羊、安裝jenkins
下載jenkins安裝包
https://www.jenkins.io/zh/download/
安裝
rpm -ivh jenkins-2.222.1-1.1.noarch.rpm
配置文件路徑
/etc/sysconfig/jenkins
啟動(dòng)
service jenkins start
admin默認(rèn)密碼
/var/lib/jenkins/secrets/initialAdminPassword
默認(rèn)端口8080
登錄管理頁面
二囚衔、安裝插件
登錄管理頁面
先安裝 Localization: Chinese (Simplified) (中文語言)
插件安裝重啟,改成中文面后昧旨,點(diǎn)擊右下角的 ‘jenkins中文社區(qū)標(biāo)簽’ → 更新中心鏡像設(shè)置
默認(rèn)中心地址锌半,下載很慢
更換鏡像地址后纳本,再安裝插件
Maven Integration plugin
Gitee Plugin
Publish Over SSH (遠(yuǎn)程部署需要)
配置環(huán)境
manage jenkins → 系統(tǒng)設(shè)置
Gitee 配置
Publish over SSH 配置
manage jenkins → 全局工具配置
JDK 配置
Git 配置
Maven 配置
三、新建Item
選擇構(gòu)建一個(gè)maven項(xiàng)目
image.png
2710347-4c2f64bfd45284d3.png
配置webhook
微信截圖_20200428183013.png
maven 打包命令
image.png
構(gòu)建后傳輸?shù)竭h(yuǎn)程服務(wù)器缴挖,執(zhí)行部署腳本
image.png
配置好后,應(yīng)用
代碼提交pro分支后自動(dòng)構(gòu)建部署
四焚辅、部署腳本
#!/bin/sh
#########
# jenkins 部署腳本
# by zhangjianyong 2020年4月23日
#########
#APP
APP_HOME="/home/jenkins/app"
APP_NAME="app.jar"
#備份變量
BACK_TIME=$(date +%F_%H_%M_%S)
BACK_HOME="$APP_HOME/backup"
#編譯輸出
TARGET_HOME="/home/jenkins/target"
TARGET_NAME="app.jar"
#使用說明映屋,用來提示輸入?yún)?shù)
usage() {
echo "Usage: $0 [start|stop|restart|status|rollback|list|deploy]"
echo "start:啟動(dòng)"
echo "stop:停止"
echo "restart:重啟"
echo "status:狀態(tài)"
echo "list:備份列表"
echo "rollback:回滾"
echo "deploy:部署"
exit 1
}
#檢查程序是否在運(yùn)行
is_exist() {
pid=`ps -ef |grep java | grep $APP_NAME | grep -v grep | awk '{print $2}' `
#如果存在返回1,不存在返回0
if [ -z "${pid}" ]; then
return 0
else
return 1
fi
}
# 啟動(dòng)命令
start() {
source ~/.bash_profile
is_exist
if [ $? -eq "1" ]; then
echo -e "\033[41;37m ${APP_NAME} 已經(jīng)在運(yùn)行中. pid=${pid} .\033[0m"
else
cd $APP_HOME
nohup java -Xms2G -Xmx2G -Xss1M -XX:+UseParallelGC -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:gc.log -jar $APP_NAME >> cat.out 2>&1 &
echo -e "\033[32m ${APP_NAME} 正在啟動(dòng)法焰。秧荆。。\033[0m"
sleep 3
is_exist
if [ $? -eq "1" ]; then
echo -e "\033[32m ${APP_NAME} 啟動(dòng)成功 . pid=${pid} . \033[0m"
else
echo -e "\033[41;37m ${APP_NAME} 啟動(dòng)失敗 . \033[0m"
fi
#exit 0
fi
}
# 停止命令
stop(){
is_exist
if [ $? -eq "1" ]; then
kill -9 ${pid}
sleep 1
is_exist
if [ $? -eq "1" ]; then
echo -e "\033[41;37m ${APP_NAME} 停止失敗 . pid=${pid} . \033[0m"
else
echo -e "\033[32m ${APP_NAME} 停止成功 . \033[0m"
fi
else
echo -e "\033[41;37m ${APP_NAME} 未啟動(dòng) . \033[0m"
fi
}
# 狀態(tài)模塊
status() {
is_exist
if [ $? -eq "1" ]; then
echo -e "\033[32m ${APP_NAME} 在運(yùn)行中. pid=${pid} . \033[0m"
else
echo -e "\033[32m ${APP_NAME} 未啟動(dòng). \033[0m"
fi
}
# 查詢備份列表
backlist(){
cd $BACK_HOME
ls -lrth $APP_NAME\_*
}
#部署
deploy(){
#不存在目錄創(chuàng)建
if [ ! -e $BACK_HOME ];then
mkdir -p $BACK_HOME
fi
if [ -f $TARGET_HOME/$TARGET_NAME ]; then
#備份
if [ -f $APP_HOME/$APP_NAME ]; then
rm $APP_HOME/$APP_NAME
echo -e "\033[32m 清理完成. $BACK_HOME/$APP_NAME\_$BACK_TIME \033[0m"
else
echo -e "\033[41;37m APP目錄下不存在$APP_NAME 清理失敗. \033[0m"
fi
#部署
mv $TARGET_HOME/$TARGET_NAME $APP_HOME/$APP_NAME
cp -R $APP_HOME/$APP_NAME $BACK_HOME/$APP_NAME\_$BACK_TIME
echo -e "\033[32m 備份歸檔完成. $APP_HOME/$APP_NAME \033[0m"
echo -e "\033[32m 部署完成. $APP_HOME/$APP_NAME \033[0m"
#重啟
stop
start
else
echo -e "\033[41;37m target目錄下不存在$APP_NAME . \033[0m"
fi
}
# 回滾
rollback() {
if [ -z $INPUT2 ]; then
echo -e "\033[41;37m 請(qǐng)輸入備份文件名 \033[0m"
exit 0
fi
if [ -f $BACK_HOME/$INPUT2 ]; then
cp $BACK_HOME/$INPUT2 $APP_HOME/$APP_NAME
stop
start
else
echo -e "\033[41;37m 不存在備份文件:$BACK_HOME/$INPUT2 \033[0m"
fi
}
main() {
INPUT1=$1
INPUT2=$2
case $INPUT1 in
rollback)
rollback $INPUT2
;;
list)
backlist
;;
deploy)
deploy
;;
restart)
stop
start
;;
start)
start
;;
status)
status
;;
stop)
stop
;;
*)
usage
;;
esac
exit 0
}
main $1 $2