# BillAI 自动部署工作流 # 当 master 分支有 push 时自动触发部署 name: Deploy BillAI on: push: branches: - master jobs: deploy: name: Deploy to Production runs-on: self-hosted steps: - name: Checkout code run: | echo "=== 拉取最新代码 ===" cd ${{ vars.DEPLOY_PATH }} git fetch origin master git reset --hard origin/master echo "当前版本: $(git log -1 --format='%h %s')" - name: Build and deploy run: | echo "=== 构建并部署服务 ===" cd ${{ vars.DEPLOY_PATH }} docker compose up -d --build --remove-orphans - name: Cleanup run: | echo "=== 清理旧镜像 ===" docker image prune -f - name: Health check run: | echo "=== 健康检查 ===" echo "等待服务启动..." sleep 15 # 通过 Docker 健康检查状态判断(不依赖端口暴露) check_container() { local name=$1 local container=$2 local status=$(docker inspect --format='{{.State.Health.Status}}' "$container" 2>/dev/null) if [ "$status" = "healthy" ]; then echo "✓ $name 服务正常" return 0 else echo "✗ $name 服务异常 (状态: $status)" return 1 fi } FAILED=0 check_container "Web" "billai-web" || FAILED=1 check_container "Server" "billai-server" || FAILED=1 check_container "Analyzer" "billai-analyzer" || FAILED=1 check_container "MongoDB" "billai-mongodb" || FAILED=1 if [ $FAILED -eq 0 ]; then echo "=== 部署成功 ===" else echo "=== 部署失败:部分服务异常 ===" docker compose ps exit 1 fi