You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.2 KiB
111 lines
3.2 KiB
#!/bin/bash
|
|
|
|
# 部署脚本:当Gitea仓库有更新时,一键部署新代码到云服务器
|
|
|
|
# 配置参数
|
|
GITEA_USER="SwtTt29"
|
|
GITEA_PASSWORD="qazswt123"
|
|
REPO_URL="http://${GITEA_USER}:${GITEA_PASSWORD}@8.137.125.67:4000/SwtTt29/Review2.git"
|
|
APP_DIR="/app"
|
|
DOCKER_COMPOSE_FILE="docker-compose.yml"
|
|
BRANCH="kkk"
|
|
IMAGE_NAME="reject-app" # 改为与docker-compose.yml中一致的镜像名称
|
|
CONTAINER_NAME="reject-app"
|
|
|
|
# 输出日志函数
|
|
log() {
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
|
|
}
|
|
|
|
# 关闭错误立即停止,改用手动错误检查
|
|
source /etc/profile
|
|
|
|
log "开始部署应用..."
|
|
|
|
# 确保脚本具有执行权限
|
|
chmod +x "$0"
|
|
|
|
# 1. 检查应用目录是否存在
|
|
if [ ! -d "$APP_DIR" ]; then
|
|
log "应用目录不存在,开始克隆仓库..."
|
|
git clone "$REPO_URL" "$APP_DIR"
|
|
if [ $? -ne 0 ]; then
|
|
log "错误:克隆仓库失败!请检查网络连接和仓库地址。"
|
|
exit 1
|
|
fi
|
|
cd "$APP_DIR"
|
|
git checkout "$BRANCH"
|
|
if [ $? -ne 0 ]; then
|
|
log "错误:切换分支失败!请检查分支名称是否正确。"
|
|
exit 1
|
|
fi
|
|
else
|
|
log "应用目录已存在,开始拉取最新代码..."
|
|
cd "$APP_DIR"
|
|
# 处理分支冲突问题
|
|
if ! git pull origin "$BRANCH" --ff-only; then
|
|
log "快进合并失败,尝试先重置本地分支再拉取..."
|
|
git fetch origin
|
|
git reset --hard origin/"$BRANCH"
|
|
if [ $? -ne 0 ]; then
|
|
log "错误:重置本地分支失败!"
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# 2. 检查docker-compose.yml文件是否存在
|
|
if [ ! -f "$DOCKER_COMPOSE_FILE" ]; then
|
|
log "错误:$DOCKER_COMPOSE_FILE 文件不存在!"
|
|
exit 1
|
|
fi
|
|
|
|
# 3. 停止并删除旧的Docker容器
|
|
log "停止并删除旧的Docker容器..."
|
|
docker-compose -f "$DOCKER_COMPOSE_FILE" down
|
|
if [ $? -ne 0 ]; then
|
|
log "警告:docker-compose down失败,尝试直接删除容器..."
|
|
fi
|
|
|
|
# 强制删除可能残留的容器
|
|
if docker ps -a | grep -q "$CONTAINER_NAME"; then
|
|
log "强制删除残留的容器 $CONTAINER_NAME..."
|
|
docker rm -f "$CONTAINER_NAME"
|
|
if [ $? -ne 0 ]; then
|
|
log "错误:强制删除容器失败!"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# 4. 直接使用docker build命令构建镜像,绕过docker-compose的buildx依赖
|
|
log "重新构建Docker镜像..."
|
|
docker build -t "$IMAGE_NAME" .
|
|
if [ $? -ne 0 ]; then
|
|
log "错误:构建镜像失败!请检查Dockerfile和依赖。"
|
|
exit 1
|
|
fi
|
|
|
|
# 5. 启动新的Docker容器(不使用build参数)
|
|
log "启动新的Docker容器..."
|
|
# 使用--no-build参数避免docker-compose尝试重新构建
|
|
docker-compose -f "$DOCKER_COMPOSE_FILE" up -d --no-build
|
|
if [ $? -ne 0 ]; then
|
|
log "错误:启动容器失败!请检查配置文件。"
|
|
exit 1
|
|
fi
|
|
|
|
# 6. 验证容器是否正常启动
|
|
log "验证容器运行状态..."
|
|
sleep 10
|
|
if docker-compose -f "$DOCKER_COMPOSE_FILE" ps | grep -q "Up"; then
|
|
log "容器启动成功!"
|
|
else
|
|
log "警告:容器可能未正常启动,正在检查日志..."
|
|
docker-compose -f "$DOCKER_COMPOSE_FILE" logs | tail -50
|
|
fi
|
|
|
|
# 7. 清理无用的Docker镜像
|
|
log "清理无用的Docker镜像..."
|
|
docker image prune -f
|
|
|
|
log "应用部署完成!"
|