持续集成流水线:强化最终自动部署流水线、测试门禁与生产冒烟自检

This commit is contained in:
wangzhibiao committed 2026-09-15 11:22:38 +08:00
1 parent 6762189093
commit f2122997d7
2 files changed
+103 -10

No files matched your search

+66 -5
View File
@@ -21,22 +21,28 @@ mkdir -p "$BACKEND_DIR" "$FRONTEND_DIR" "$LOG_DIR"
echo "=== 0. 检查运行时安全配置 ==="
MISSING_CONFIG=0
if [ -z "${TRAIN_STUDENT_IDENTITY_ENCRYPTION_KEY:-}" ]; then
echo "错误:缺少 TRAIN_STUDENT_IDENTITY_ENCRYPTION_KEY"
exit 1
MISSING_CONFIG=1
fi
if [ -z "${TRAIN_STUDENT_IDENTITY_HASH_KEY:-}" ]; then
echo "错误:缺少 TRAIN_STUDENT_IDENTITY_HASH_KEY"
exit 1
MISSING_CONFIG=1
fi
if [ -z "${SPRING_REDIS_PASSWORD:-}" ]; then
echo "错误:缺少 SPRING_REDIS_PASSWORD"
MISSING_CONFIG=1
fi
if [ "$MISSING_CONFIG" -ne 0 ]; then
echo "运行时安全配置检查失败"
exit 1
fi
echo "运行时安全配置存在性检查通过"
echo "required runtime configuration present."
echo "=== 1. 检查并停止当前用户的旧后端进程 ==="
TARGET_PID=""
@@ -100,8 +106,8 @@ for i in {1..35}; do
sleep 2
done
if [ "$HEALTH_OK" -ne 1 ]; then
echo "错误:后端健康检查超时,请检查 $LOG_PATH"
if [ "$HEALTH_OK" != "1" ]; then
echo "Backend health check failed: 后端健康检查失败或超时,请检查 $LOG_PATH"
if kill -0 "$NEW_PID" 2>/dev/null; then
kill -15 "$NEW_PID" 2>/dev/null || true
@@ -167,6 +173,12 @@ http {
NGINX_EOF
fi
echo "验证 Nginx 配置文件 (Nginx Gate)..."
if ! /usr/sbin/nginx -t -c "$NGINX_CONF"; then
echo "错误:Nginx 配置文件测试失败,禁止启动或重载"
exit 1
fi
if pgrep -u "$(whoami)" -f "nginx: master" >/dev/null; then
echo "平滑重载前端 Nginx 服务..."
@@ -183,4 +195,53 @@ else
fi
fi
echo "=== 4. 执行生产环境自动化冒烟测试 (Production Smoke Gate) ==="
SMOKE_PASS=1
# A. 验证前端应用首页
HTTP_STATUS_A=$(curl -o /dev/null -s -w "%{http_code}" "http://127.0.0.1:8082/")
if [ "$HTTP_STATUS_A" = "200" ]; then
echo "[Smoke PASS] A: http://127.0.0.1:8082/ -> HTTP $HTTP_STATUS_A"
else
echo "[Smoke FAIL] A: http://127.0.0.1:8082/ -> HTTP $HTTP_STATUS_A (预期 200)"
SMOKE_PASS=0
fi
# B. 验证后端 API 反向代理及业务状态
RES_B=$(curl -s "http://127.0.0.1:8082/prod-api/captchaImage" 2>/dev/null)
HTTP_STATUS_B=$(curl -o /dev/null -s -w "%{http_code}" "http://127.0.0.1:8082/prod-api/captchaImage")
if [ "$HTTP_STATUS_B" = "200" ] && echo "$RES_B" | grep -q '"code":200'; then
echo "[Smoke PASS] B: http://127.0.0.1:8082/prod-api/captchaImage -> HTTP $HTTP_STATUS_B 且 code:200"
else
echo "[Smoke FAIL] B: http://127.0.0.1:8082/prod-api/captchaImage -> HTTP $HTTP_STATUS_B 业务响应异常"
SMOKE_PASS=0
fi
# C. 验证 Human Documentation Portal 首页
HTTP_STATUS_C=$(curl -o /dev/null -s -w "%{http_code}" "http://127.0.0.1:8082/docs/visual/index.html")
if [ "$HTTP_STATUS_C" = "200" ]; then
echo "[Smoke PASS] C: http://127.0.0.1:8082/docs/visual/index.html -> HTTP $HTTP_STATUS_C"
else
echo "[Smoke FAIL] C: http://127.0.0.1:8082/docs/visual/index.html -> HTTP $HTTP_STATUS_C (预期 200)"
SMOKE_PASS=0
fi
# D. 验证文档静态资源 docs.css 与 docs.js
HTTP_STATUS_CSS=$(curl -o /dev/null -s -w "%{http_code}" "http://127.0.0.1:8082/docs/visual/assets/docs.css")
HTTP_STATUS_JS=$(curl -o /dev/null -s -w "%{http_code}" "http://127.0.0.1:8082/docs/visual/assets/docs.js")
if [ "$HTTP_STATUS_CSS" = "200" ] && [ "$HTTP_STATUS_JS" = "200" ]; then
echo "[Smoke PASS] D: docs.css (HTTP $HTTP_STATUS_CSS) & docs.js (HTTP $HTTP_JS) -> HTTP 200"
else
echo "[Smoke FAIL] D: docs.css (HTTP $HTTP_STATUS_CSS), docs.js (HTTP $HTTP_JS) (预期 200)"
SMOKE_PASS=0
fi
if [ "$SMOKE_PASS" != "1" ]; then
echo "错误:生产环境冒烟测试未全部通过,部署失败!"
exit 1
fi
echo "=== 生产环境冒烟测试全部通过 (Production Smoke Gate PASSED) ==="
echo "APPLICATION_URL=http://192.168.139.230:8082/"
echo "DOCUMENTATION_URL=http://192.168.139.230:8082/docs/visual/index.html"
echo "=== 部署全部就绪!前端访问地址: http://192.168.139.230:8082 ==="