| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- #!/bin/bash
- # Enhanced Deployment Script for junma-api
- # 参考PowerShell脚本结构,实现bash发布命令
- set -e
- # 颜色定义
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- YELLOW='\033[1;33m'
- CYAN='\033[0;36m'
- NC='\033[0m' # No Color
- # 日志函数
- log_info() {
- echo -e "${GREEN}$1${NC}"
- }
- log_warn() {
- echo -e "${YELLOW}$1${NC}"
- }
- log_error() {
- echo -e "${RED}$1${NC}"
- }
- log_step() {
- echo -e "${CYAN}$1${NC}"
- }
- # 错误处理函数
- handle_error() {
- log_error "部署失败: $1"
- exit 1
- }
- # 主部署流程
- log_info "开始 junma-api 部署..."
- try {
- # 拉取最新代码
- log_warn "拉取最新代码..."
- if ! git pull origin main; then
- handle_error "Git pull 失败"
- fi
- # 清理旧的构建文件
- log_warn "清理旧的构建文件..."
- if [ -d "dist" ]; then
- rm -rf dist
- fi
- # 清理node_modules(可选)
- if [ -d "node_modules" ]; then
- log_warn "清理node_modules..."
- rm -rf node_modules
- fi
- # 移除锁文件(可选)
- if [ -f "package-lock.json" ]; then
- rm -f package-lock.json
- fi
- if [ -f "yarn.lock" ]; then
- rm -f yarn.lock
- fi
- # 安装依赖
- log_warn "安装依赖..."
- if ! yarn install; then
- handle_error "依赖安装失败"
- fi
- # 构建生产版本
- log_warn "构建生产版本..."
- if ! yarn build; then
- handle_error "构建失败"
- fi
- # 检查构建结果
- log_warn "检查构建结果..."
- if [ ! -d "dist" ]; then
- handle_error "构建失败,dist目录不存在"
- fi
- # 复制环境配置文件
- log_warn "复制环境配置文件..."
- if [ -f ".env.production" ]; then
- cp .env.production dist/.env
- else
- log_warn "警告: .env.production 文件不存在"
- fi
- # 复制package.json
- cp package.json dist/package.json
- # 部署到服务器
- log_warn "部署到服务器..."
-
- # 尝试不同的上传方法
- upload_success=false
-
- # 尝试rsync
- if command -v rsync >/dev/null 2>&1; then
- log_step "使用rsync上传..."
- if rsync --exclude='node_modules/' -ravzh --delete -e "ssh -o StrictHostKeyChecking=no" ./dist/ root@8.210.167.152:/var/www/junma-api/; then
- upload_success=true
- log_info "rsync上传成功"
- else
- log_warn "rsync上传失败,尝试scp..."
- fi
- else
- log_warn "rsync不可用,尝试scp..."
- fi
-
- # 尝试scp如果rsync失败
- if [ "$upload_success" = false ]; then
- if command -v scp >/dev/null 2>&1; then
- log_step "使用scp上传..."
- if scp -r -o StrictHostKeyChecking=no ./dist/* root@8.210.167.152:/var/www/junma-api/; then
- upload_success=true
- log_info "scp上传成功"
- else
- handle_error "scp上传失败"
- fi
- else
- handle_error "没有可用的上传工具 (rsync/scp)"
- fi
- fi
-
- if [ "$upload_success" = false ]; then
- handle_error "文件上传失败 - 没有找到可用的上传方法"
- fi
- # 在服务器上执行部署后操作
- log_warn "在服务器上执行部署后操作..."
- if ssh -o StrictHostKeyChecking=no root@8.210.167.152 "cd /var/www/junma-api && yarn install && pm2 restart junma-api"; then
- log_info "服务器部署操作成功"
- else
- handle_error "服务器部署操作失败"
- fi
- log_info "部署完成!"
- log_info "API服务已重启"
- log_info "服务地址: http://8.210.167.152:3000"
- } catch {
- log_error "部署过程中发生错误: $1"
- exit 1
- }
|