Alibaba cloud toolkit 自动部署
官方介绍:集开发、测试、诊断、部署为一体的免费本地 IDE 插件,帮助开发者真正实现一键式研发部署。提升研发部署速度数倍以上,大幅降低研发成本。
官方链接
1. IDEA 安装 Alibaba cloud toolkit
官方传送门
官方图文并茂,这里就不重复了。
2. 部署应用到Linux服务器
官方传送门
官方的截图可能是旧版本,所以这里就越俎代庖,写下自己的自动部署的一些步骤。
预计达到的效果:
- Maven打包,过程中如果出现异常,直接退出。
- 备份服务器的包,备份后缀使用时间(年月日时分秒),并且要记录备份的名称,异常时回滚使用。
- 上传包到服务器
- 终止正在运行的项目,使用最新的包启动项目,告知启动是否成功,未成功,回滚到上一版本启动。
2.1 添加服务器
操作步骤:
- 在IntelliJ IDEA顶部菜单栏中选择Tools > Alibaba Cloud > Alibaba Cloud View > Host。
- 在弹出的Host页签中单击Add Host。
- 在Add Host对话框中设置Host List、Username、Password等参数,完成后单击Add。
2.2 配置自动部署
操作:
- 在IntelliJ IDEA顶部菜单中选择Alibaba Cloud > Deploy to Host…。
- 在Deploy to Host对话框设置部署参数,然后单击Run
还记得我们的目标吗? 第一步是要备份原来的系统,方法是部署前,运行服务器上的备份脚本,设置参考如下图:
参考的备份脚本:
#!/bin/bash
# 源JAR包路径
SOURCE_JAR_PATH="/your/path/your_app.jar"
# 备份目录
BACKUP_DIR="/your/backup/path"
# 创建备份目录(如果不存在)
mkdir -p $BACKUP_DIR
# 备份JAR包
BACKUP_FILE="${BACKUP_DIR}/your_app.jar"
cp $SOURCE_JAR_PATH $BACKUP_FILE
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "JAR包备份成功: $BACKUP_FILE"
else
echo "JAR包备份失败"
fi
第二步,打包上传最新的jar包,并且重启,配置参考如下图:
要注意两点:
- 打包命令一定要确定好,否则会报错。 比如我的项目是聚合项目,发布的是
fancoding-web
。 - 部署后,运行的脚本或者命令根据自己的需求去编写,我的只是参考。
restart.sh
如下:
#!/bin/bash
# 1.停应用
JAR_NAME="fancoding.jar"
# Find the process ID (PID) of the JAR
pid=$(ps aux | grep "$JAR_NAME" | grep -v "grep" | awk '{print $2}')
# Check if the process is running
if [ -z "$pid" ]; then
echo "No process found for $JAR_NAME"
else
echo "Stopping process $JAR_NAME for $JAR_NAME"
kill $pid
fi
# 2. 启应用
# your app info
JAR_Path="/data/webapp/test/fancoding.jar"
JAR_LOG="/data/webapp/test/app.log"
JAR_PORT=9700
java -jar ${JAR_Path} >> ${JAR_LOG} 2>&1 &
echo "正在启动${jar_name}应用 "
# 获取Java程序的进程ID
JAVA_PID=$!
# 等待Java程序启动完成,最多等待60秒
timeout=60
IS_START=1
while [ $timeout -gt 0 ]
do
# 检查端口是否被监听
if netstat -tuln | grep ":${JAR_PORT}" >/dev/null; then
echo "${JAR_NAME}程序启动成功。(PID : $JAVA_PID)"
break
else
if [ $timeout -eq 3 ];then
echo "${JAR_NAME}程序启动超时,请稍后查看日志确定是否启动成功,日志路径 ${JAR_LOG}"
IS_START=0
else
echo "${JAR_NAME}程序正在启动...."
fi
fi
sleep 3
timeout=$((timeout - 3))
done
# 3.备份的应用重命名
# 当然可以没有这块
if [ ${IS_START} = 1 ]; then
TIMESTAMP=$(date +%Y%m%d%H%M%S)
SOURCE_FILE="/data/webapp/test/backup/fancoding.jar"
TARGET_FILE="/data/webapp/test/backup/fancoding.jar.bak${TIMESTAMP}"
mv ${SOURCE_FILE} ${TARGET_FILE}
echo "备份成功"
else
echo "项目可能启动失败,还原jar包"
rm #{JAR_Path}
cp ${SOURCE_FILE} #{JAR_Path}
java -jar ${JAR_Path} >> ${JAR_LOG} 2>&1 &
rm ${SOURCE_FILE}
ehco "已删除此备份"
fi
3. Alibaba cloud toolkit 帮你做了什么?
集成了自动打包、自动上传部署、自动运行。省略了手工打包,上传包,备份应用,重启应用。
节约时间,节约精力,降本增效!
备注:
restart.sh
= start.sh
+ start.sh
如果需要单独的脚本参考,可以看看 用shell脚本启停项目。