diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index fdac6f8..a5a56d0 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -69,7 +69,7 @@ jobs: run: | sleep 10 for i in {1..5}; do - if bun -e "fetch('http://localhost:3001/v1/health').then(r=>r.ok?process.exit(0):process.exit(1)).catch(()=>process.exit(1))"; then + if bun -e "try{const r=await fetch('http://localhost:3001/v1/health');process.exit(r.ok?0:1)}catch{process.exit(1)}"; then echo "Test environment is healthy!" exit 0 fi @@ -92,22 +92,20 @@ jobs: - name: Checkout code uses: actions/checkout@v4 + - name: Backup current image + run: docker tag duoqi-api:prod duoqi-api:rollback 2>/dev/null || true + - name: Build production image run: docker build -t duoqi-api:prod . - name: Deploy production - run: | - # 备份当前镜像(用于回滚) - docker tag duoqi-api:prod duoqi-api:rollback 2>/dev/null || true - - # 滚动更新 - docker compose -f /opt/duoqi-api/docker-compose.yml up -d --no-build api-prod + run: docker compose -f /opt/duoqi-api/docker-compose.yml up -d --no-build api-prod - name: Health check run: | sleep 15 for i in {1..5}; do - if bun -e "fetch('http://localhost:3000/v1/health').then(r=>r.ok?process.exit(0):process.exit(1)).catch(()=>process.exit(1))"; then + if bun -e "try{const r=await fetch('http://localhost:3000/v1/health');process.exit(r.ok?0:1)}catch{process.exit(1)}"; then echo "Production deployment successful!" exit 0 fi @@ -118,7 +116,7 @@ jobs: # 健康检查失败,自动回滚 echo "Health check failed! Rolling back..." docker tag duoqi-api:rollback duoqi-api:prod - docker compose -f /opt/duoqi-api/docker-compose.yml up -d --no-build api-prod + docker compose -f /opt/duoqi-api/docker-compose.yml up -d --force-recreate --no-build api-prod exit 1 - name: Cleanup