首语
关于应用架构,博主会出一系列的后台相关博客。为大家展示
之前介绍了一些云资源的使用和设计。那么,当应用框架与服务器全部准备就绪之后,我们如何快速的进行自动化的发布。博主这里介绍一小部分利用jenkins这样的工具配合脚本,进行快速发布(restart,就是要暴力)
并不是所有的业务场景一定要求99.999%,并且要求蓝绿或者灰度发布。因为这样的运维成本是非常高的。
自动化工具
市面上有n多的自动化工具。大部分公司可能会使用jenkins。博主团队使用自建devOps+jenkins。尽可能减少对jenkins的依赖
- 阿里云自动化组件
- jenkins,参考博主的:https://blog.youkuaiyun.com/zl592886931/article/details/93190544 与 https://blog.youkuaiyun.com/zl592886931/article/details/93190933
- 云效自动化构建
自动化方式
目前就简单的业务场景(暴力restart),来为大家展示
最简单的方式,将大部分的命令直接写在jenkins中,但是这样做,就会将自动化命令分散。
我们可以创建一个devops项目,将命令以及配置都放在这个项目,提供更多的脚本执行参数
后端自动化脚本
这里放一个最简单的restart脚本
#执行命令如: sh /home/digital/gateway/deploy.sh restart gateway qa
#!/bin/bash
ACTION=$1
APP_NAME=$2 # jar包
ENV=$3 # JAVA spring.profiles.active
JAR_NAME="$APP_NAME.jar" # jar包的名字
APP_PATH=/home/digital/${APP_NAME} #所有的应用放在digital用户下当前应用的目录下
PID_FILE=${APP_PATH}/pid # 应用的pid会保存到这个文件中
echo "ACTION: $ACTION, APP_NAME: $APP_NAME, ENV: $ENV, JAR_NAME: $JAR_NAME, APP_PATH: $APP_PATH"
#创建相关目录,如果存在就算了(jenkins会自动创建)
if [ ! -d ${APP_PATH} ]; then
mkdir ${APP_PATH}
echo "$APP_PATH is created."
fi
start() {
echo "start ${APP_PATH}/${JAR_NAME}"
if [ -f "$PID_FILE" ] && kill -0 "$(cat ${PID_FILE})"; then
echo "Application is running, exit"
exit 0
fi
java -jar ${APP_PATH}/${JAR_NAME} --spring.profiles.active=${ENV} >/dev/null 2>&1 &
echo $! > ${PID_FILE}
}
stop() {
echo "stop ${APP_PATH}/${JAR_NAME}"
if [ -f "$PID_FILE" ]; then
kill -9 `cat $PID_FILE`
rm $PID_FILE
else
echo "pid file $PID_FILE does not exist, do noting"
fi
}
case "$ACTION" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
esac
前端自动化脚本
这个其实很简单,分两种情况:
- 前后不分离:这种统一走后端脚本即可,前端资源都在后端的web服务器上
- 前后分离:以nginx为例,以vue为例,使用build之后,打成zip,然后流程一样,scp到服务器,然后unzip解压,restart nginx即可,后续博主会有前端服务器以及自动化设计的博客