一、安装jenkins
下载jenkins安装包
https://www.jenkins.io/zh/download/
安装
rpm -ivh jenkins-2.222.1-1.1.noarch.rpm
配置文件路径
/etc/sysconfig/jenkins
启动
service jenkins start
admin默认密码
/var/lib/jenkins/secrets/initialAdminPassword
默认端口8080
登录管理页面
二、安装插件
登录管理页面
先安装 Localization: Chinese (Simplified) (中文语言)
插件安装重启,改成中文面后,点击右下角的 ‘jenkins中文社区标签’ → 更新中心镜像设置
默认中心地址,下载很慢
更换镜像地址后,再安装插件
Maven Integration plugin
Gitee Plugin
Publish Over SSH (远程部署需要)
配置环境
manage jenkins → 系统设置
Gitee 配置
Publish over SSH 配置
manage jenkins → 全局工具配置
JDK 配置
Git 配置
Maven 配置
三、新建Item
选择构建一个maven项目
image.png 2710347-4c2f64bfd45284d3.png配置webhook
微信截图_20200428183013.pngmaven 打包命令
image.png构建后传输到远程服务器,执行部署脚本
image.png配置好后,应用
代码提交pro分支后自动构建部署
四、部署脚本
#!/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"
#使用说明,用来提示输入参数
usage() {
echo "Usage: $0 [start|stop|restart|status|rollback|list|deploy]"
echo "start:启动"
echo "stop:停止"
echo "restart:重启"
echo "status:状态"
echo "list:备份列表"
echo "rollback:回滚"
echo "deploy:部署"
exit 1
}
#检查程序是否在运行
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
}
# 启动命令
start() {
source ~/.bash_profile
is_exist
if [ $? -eq "1" ]; then
echo -e "\033[41;37m ${APP_NAME} 已经在运行中. 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} 正在启动。。。\033[0m"
sleep 3
is_exist
if [ $? -eq "1" ]; then
echo -e "\033[32m ${APP_NAME} 启动成功 . pid=${pid} . \033[0m"
else
echo -e "\033[41;37m ${APP_NAME} 启动失败 . \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} 未启动 . \033[0m"
fi
}
# 状态模块
status() {
is_exist
if [ $? -eq "1" ]; then
echo -e "\033[32m ${APP_NAME} 在运行中. pid=${pid} . \033[0m"
else
echo -e "\033[32m ${APP_NAME} 未启动. \033[0m"
fi
}
# 查询备份列表
backlist(){
cd $BACK_HOME
ls -lrth $APP_NAME\_*
}
#部署
deploy(){
#不存在目录创建
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 请输入备份文件名 \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
网友评论