From a53795855057e3893d5a5a34f57b1dbf9abf5341 Mon Sep 17 00:00:00 2001 From: abcv7 Date: Wed, 26 Aug 2026 16:55:20 +0800 Subject: [PATCH] =?UTF-8?q?feat(ci):=20deploy-test.yml=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=89=8D=E7=AB=AF=20SDK=20=E6=9E=84=E5=BB=BA=E5=92=8C?= =?UTF-8?q?=20nginx=20=E9=83=A8=E7=BD=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 webpack 构建前端 SDK 步骤 (node:20-alpine) - 部署 nginx 容器提供静态文件 + /tac/api/ 反代 - 健康检查同时验证后端 API 和前端 SDK - 前端通过 0.0.0.0:8080 访问 --- .gitea/workflows/deploy-test.yml | 77 ++++++++++++++++++++++++++++---- 1 file changed, 69 insertions(+), 8 deletions(-) diff --git a/.gitea/workflows/deploy-test.yml b/.gitea/workflows/deploy-test.yml index efdf0bd..fec6123 100644 --- a/.gitea/workflows/deploy-test.yml +++ b/.gitea/workflows/deploy-test.yml @@ -54,6 +54,18 @@ jobs: docker rm -f mvnbuild ls -la tianai-captcha-platform/*.jar + - name: Build frontend SDK (webpack) + run: | + set -e + docker rm -f tacbuild 2>/dev/null || true + docker run -d --name tacbuild -w /ws node:20-alpine sleep infinity + docker cp "$GITHUB_WORKSPACE/tianai-captcha-web-sdk/." tacbuild:/ws/ + docker exec tacbuild sh -c "npm install --prefer-offline && npm run buildprod" + docker cp tacbuild:/ws/dist "$GITHUB_WORKSPACE/tac-dist" + docker rm -f tacbuild + echo "=== 构建产物 ===" + ls -la "$GITHUB_WORKSPACE/tac-dist/tac/js/" "$GITHUB_WORKSPACE/tac-dist/tac/css/" 2>/dev/null + - name: Build & push image run: | set -e @@ -71,7 +83,7 @@ jobs: set -e echo "===== 拉取镜像 =====" docker pull 156.233.226.46:5000/tianai-captcha-platform:test - echo "===== 重建容器 =====" + echo "===== 重建后端容器 =====" docker rm -f tianai-captcha 2>/dev/null || true docker run -d --name tianai-captcha \ --network mw \ @@ -79,12 +91,51 @@ jobs: -p 127.0.0.1:18200:18200 \ -v /opt/tianai/config:/app/config \ 156.233.226.46:5000/tianai-captcha-platform:test - sleep 15 - docker ps --filter name=tianai-captcha --format "{{.Names}} {{.Status}}" - docker logs tianai-captcha 2>&1 | tail -3 + echo "===== 部署前端 SDK =====" + mkdir -p /opt/tianai/web/tac + ' + # 上传前端 SDK 构建产物 + scp -i $HOME/.ssh/id_ed25519_deploy -r "$GITHUB_WORKSPACE/tac-dist/tac"/* \ + root@${{ secrets.CAPTCHA_TEST_HOST }}:/opt/tianai/web/tac/ + # 上传 nginx 配置 + cat > /tmp/captcha-nginx.conf <<'NGINX_EOF' + server { + listen 80; + server_name _; + gzip on; + gzip_static on; + gzip_types text/plain text/css application/json application/javascript text/xml image/svg+xml; + gzip_min_length 256; + location / { + root /usr/share/nginx/html; + try_files $uri $uri/ =404; + } + location ^~ /tac/api/ { + proxy_pass http://tianai-captcha:18200/api/; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + } + NGINX_EOF + scp -i $HOME/.ssh/id_ed25519_deploy /tmp/captcha-nginx.conf \ + root@${{ secrets.CAPTCHA_TEST_HOST }}:/opt/tianai/web/nginx.conf + $SSH_CMD ' + echo "===== 重建 nginx 容器 =====" + docker rm -f tianai-web 2>/dev/null || true + docker run -d --name tianai-web \ + --network mw \ + --restart unless-stopped \ + -p 0.0.0.0:8080:80 \ + -v /opt/tianai/web:/usr/share/nginx/html:ro \ + -v /opt/tianai/web/nginx.conf:/etc/nginx/conf.d/default.conf:ro \ + nginx:alpine + sleep 3 + docker ps --filter name=tianai-web --format "{{.Names}} {{.Status}}" ' - - name: Health check (generate API, 校验 JSON code 而非 HTTP 状态) + - name: Health check (generate API + 前端页面) env: TEST_SITE_KEY: 6a062b70-c0b3-428e-8f1b-cca402e67ddd run: | @@ -98,15 +149,25 @@ jobs: sleep 5 done if [ "$OK" != "1" ]; then - echo "健康检查失败 (code=$CODE)" + echo "后端 API 健康检查失败 (code=$CODE)" $SSH_CMD 'docker logs tianai-captcha --tail 30' || true exit 1 fi - echo "测试环境健康检查 OK (code=$CODE)" + echo "后端 API 健康检查 OK (code=$CODE)" + # 检查前端 nginx + HTTP_CODE=$($SSH_CMD "curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:8080/tac/js/tac.min.js" 2>/dev/null || echo 000) + if [ "$HTTP_CODE" = "200" ]; then + echo "前端 SDK 部署 OK (http_code=$HTTP_CODE)" + else + echo "前端 SDK 部署异常 (http_code=$HTTP_CODE)" + exit 1 + fi - name: Deployment summary if: always() run: | echo "commit: $GITHUB_SHA" - echo "test 访问: test 机 127.0.0.1:18200 (mw 网络: tianai-captcha:18200)" + echo "后端 API: test 机 127.0.0.1:18200 (mw 网络: tianai-captcha:18200)" + echo "前端 SDK: test 机 0.0.0.0:8080 (mw 网络: tianai-web:80)" + echo "SDK 路径: http://:8080/tac/js/tac.min.js" echo "晋升生产: Gitea → 仓库 → Actions → promote-prod → 输入 yes"