前言:为什么需要自动化部署?
在云计算时代,应用部署效率直接影响业务迭代速度。传统手动部署方式存在以下痛点:
- 人工操作易出错(版本混淆、配置遗漏等)
- 多环境一致性难以保证
- 回滚耗时且不可追溯
- 无法应对突发流量快速扩容
本文将以SpringBoot应用的ECS部署为例,详解5种自动化部署方案及其演进路径,涵盖从个人项目到企业级生产的完整场景。
一、基础方案:Shell脚本+定时任务
1.1 适用场景
- 单服务器部署
- 快速验证原型
- 个人开发者简单项目
1.2 实现架构
1.3 完整实现代码
#!/bin/bash
# deploy.sh v1.2
APP_NAME="chat-0.0.1-SNAPSHOT.jar"
APP_PORT=8080
LOG_FILE="/var/log/app.log"
DEPLOY_DIR="/opt/app"
# 环境检查
[ ! -d "$DEPLOY_DIR" ] && mkdir -p $DEPLOY_DIR
cd $DEPLOY_DIR || exit 1
# 停止旧进程
PID=$(pgrep -f $APP_NAME)
if [ -n "$PID" ]; then
echo "[INFO] Stopping process $PID"
kill -9 $PID
fi
# 备份机制(保留最近5个版本)
BACKUP_FILE="$APP_NAME.$(date +%Y%m%d%H%M%S).bak"
cp $APP_NAME backups/$BACKUP_FILE
ls -t backups/*.bak | tail -n +6 | xargs rm -f
# 更新文件
mv /tmp/$APP_NAME ./
# 启动应用
nohup java -jar $APP_NAME \
--server.port=$APP_PORT \
--spring.profiles.active=prod \
> $LOG_FILE 2>&1 &
# 健康检查
sleep 10
if curl -s http://127.0.0.1:$APP_PORT/health | grep -q "UP"; then
echo "[SUCCESS] Application started"
else
echo "[ERROR] Health check failed!"
exit 1
fi
1.4 改进方向
- 增加日志轮转(logrotate)
- 添加邮件/钉钉通知机制
- 集成阿里云监控