feat(ci): deploy-test.yml 增加前端 SDK 构建和 nginx 部署
deploy-test / build-and-deploy-test (push) Successful in 3m8s
deploy-test / build-and-deploy-test (push) Successful in 3m8s
- 新增 webpack 构建前端 SDK 步骤 (node:20-alpine) - 部署 nginx 容器提供静态文件 + /tac/api/ 反代 - 健康检查同时验证后端 API 和前端 SDK - 前端通过 0.0.0.0:8080 访问
This commit is contained in:
@@ -54,6 +54,18 @@ jobs:
|
|||||||
docker rm -f mvnbuild
|
docker rm -f mvnbuild
|
||||||
ls -la tianai-captcha-platform/*.jar
|
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
|
- name: Build & push image
|
||||||
run: |
|
run: |
|
||||||
set -e
|
set -e
|
||||||
@@ -71,7 +83,7 @@ jobs:
|
|||||||
set -e
|
set -e
|
||||||
echo "===== 拉取镜像 ====="
|
echo "===== 拉取镜像 ====="
|
||||||
docker pull 156.233.226.46:5000/tianai-captcha-platform:test
|
docker pull 156.233.226.46:5000/tianai-captcha-platform:test
|
||||||
echo "===== 重建容器 ====="
|
echo "===== 重建后端容器 ====="
|
||||||
docker rm -f tianai-captcha 2>/dev/null || true
|
docker rm -f tianai-captcha 2>/dev/null || true
|
||||||
docker run -d --name tianai-captcha \
|
docker run -d --name tianai-captcha \
|
||||||
--network mw \
|
--network mw \
|
||||||
@@ -79,12 +91,51 @@ jobs:
|
|||||||
-p 127.0.0.1:18200:18200 \
|
-p 127.0.0.1:18200:18200 \
|
||||||
-v /opt/tianai/config:/app/config \
|
-v /opt/tianai/config:/app/config \
|
||||||
156.233.226.46:5000/tianai-captcha-platform:test
|
156.233.226.46:5000/tianai-captcha-platform:test
|
||||||
sleep 15
|
echo "===== 部署前端 SDK ====="
|
||||||
docker ps --filter name=tianai-captcha --format "{{.Names}} {{.Status}}"
|
mkdir -p /opt/tianai/web/tac
|
||||||
docker logs tianai-captcha 2>&1 | tail -3
|
'
|
||||||
|
# 上传前端 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:
|
env:
|
||||||
TEST_SITE_KEY: 6a062b70-c0b3-428e-8f1b-cca402e67ddd
|
TEST_SITE_KEY: 6a062b70-c0b3-428e-8f1b-cca402e67ddd
|
||||||
run: |
|
run: |
|
||||||
@@ -98,15 +149,25 @@ jobs:
|
|||||||
sleep 5
|
sleep 5
|
||||||
done
|
done
|
||||||
if [ "$OK" != "1" ]; then
|
if [ "$OK" != "1" ]; then
|
||||||
echo "健康检查失败 (code=$CODE)"
|
echo "后端 API 健康检查失败 (code=$CODE)"
|
||||||
$SSH_CMD 'docker logs tianai-captcha --tail 30' || true
|
$SSH_CMD 'docker logs tianai-captcha --tail 30' || true
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
- name: Deployment summary
|
||||||
if: always()
|
if: always()
|
||||||
run: |
|
run: |
|
||||||
echo "commit: $GITHUB_SHA"
|
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://<test-ip>:8080/tac/js/tac.min.js"
|
||||||
echo "晋升生产: Gitea → 仓库 → Actions → promote-prod → 输入 yes"
|
echo "晋升生产: Gitea → 仓库 → Actions → promote-prod → 输入 yes"
|
||||||
|
|||||||
Reference in New Issue
Block a user