7eba30ee46
- 服务器一键配置脚本 - 部署脚本 (支持测试/正式环境) - Webhook 接收器 - 完整使用文档
81 lines
2.1 KiB
Bash
81 lines
2.1 KiB
Bash
#!/bin/bash
|
|
# kb-web 自动部署脚本
|
|
# 用法: ./deploy.sh [test|prod] [branch]
|
|
|
|
set -e
|
|
|
|
DEPLOY_ENV=${1:-test}
|
|
BRANCH=${2:-main}
|
|
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
|
|
|
# 配置
|
|
case $DEPLOY_ENV in
|
|
test)
|
|
DEPLOY_DIR="/var/www/kb-web-test"
|
|
BACKUP_DIR="/var/www/kb-web-test-backups"
|
|
;;
|
|
prod)
|
|
DEPLOY_DIR="/var/www/kb-web-prod"
|
|
BACKUP_DIR="/var/www/kb-web-prod-backups"
|
|
;;
|
|
*)
|
|
echo "用法: $0 [test|prod] [branch]"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
REPO_URL="ssh://sc-gitea@192.168.1.22:2223/starmen1265/kb-web.git"
|
|
LOG_FILE="/var/log/kb-web-deploy.log"
|
|
|
|
log() {
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
|
|
}
|
|
|
|
log "========== 开始部署 $DEPLOY_ENV 环境 =========="
|
|
log "分支: $BRANCH"
|
|
log "目标目录: $DEPLOY_DIR"
|
|
|
|
# 创建目录
|
|
mkdir -p "$DEPLOY_DIR" "$BACKUP_DIR" "$(dirname "$LOG_FILE")"
|
|
|
|
# 备份当前版本
|
|
if [ -d "$DEPLOY_DIR/.git" ]; then
|
|
log "备份当前版本..."
|
|
CURRENT_COMMIT=$(cd "$DEPLOY_DIR" && git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
|
tar -czf "$BACKUP_DIR/backup_${CURRENT_COMMIT}_${TIMESTAMP}.tar.gz" -C "$DEPLOY_DIR" . 2>/dev/null || true
|
|
# 只保留最近5个备份
|
|
cd "$BACKUP_DIR" && ls -t | tail -n +6 | xargs -r rm -f
|
|
fi
|
|
|
|
# 拉取代码
|
|
if [ -d "$DEPLOY_DIR/.git" ]; then
|
|
log "更新代码..."
|
|
cd "$DEPLOY_DIR"
|
|
git fetch origin
|
|
git reset --hard "origin/$BRANCH"
|
|
else
|
|
log "克隆代码..."
|
|
git clone -b "$BRANCH" "$REPO_URL" "$DEPLOY_DIR"
|
|
cd "$DEPLOY_DIR"
|
|
fi
|
|
|
|
# 设置权限
|
|
log "设置权限..."
|
|
chown -R www-data:www-data "$DEPLOY_DIR" 2>/dev/null || chown -R nginx:nginx "$DEPLOY_DIR" 2>/dev/null || true
|
|
find "$DEPLOY_DIR" -type d -exec chmod 755 {} \;
|
|
find "$DEPLOY_DIR" -type f -exec chmod 644 {} \;
|
|
|
|
# 记录部署信息
|
|
DEPLOY_INFO="$DEPLOY_DIR/.deploy_info"
|
|
cat > "$DEPLOY_INFO" << EOF
|
|
环境: $DEPLOY_ENV
|
|
分支: $BRANCH
|
|
提交: $(git rev-parse HEAD)
|
|
时间: $(date '+%Y-%m-%d %H:%M:%S')
|
|
部署者: webhook
|
|
EOF
|
|
|
|
log "部署完成!"
|
|
log "提交: $(git log -1 --oneline)"
|
|
log "=========================================="
|