From c54251e057782ac053edc4b5abc2e59b387510bc Mon Sep 17 00:00:00 2001 From: liuyihe <2513762445@qq.com> Date: Thu, 30 Jul 2026 22:46:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/docker/Dockerfile | 5 +- docs/test-environment-deployment.md | 90 +++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 docs/test-environment-deployment.md diff --git a/deploy/docker/Dockerfile b/deploy/docker/Dockerfile index c06dd46a5..c0f6c7646 100644 --- a/deploy/docker/Dockerfile +++ b/deploy/docker/Dockerfile @@ -1,8 +1,7 @@ ARG BASE_IMAGE=docker.m.daocloud.io/library/eclipse-temurin:17-jre-alpine FROM ${BASE_IMAGE} -RUN apk add --no-cache curl \ - && addgroup -S app \ +RUN addgroup -S app \ && adduser -S -G app -u 10001 app WORKDIR /app @@ -18,6 +17,6 @@ ENV JAVA_OPTS="-XX:MaxRAMPercentage=75.0 -XX:+ExitOnOutOfMemoryError -Dfile.enco EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=3 \ - CMD curl -fsS "http://127.0.0.1:${SERVER_PORT}/actuator/health" || exit 1 + CMD busybox wget -q -O /dev/null "http://127.0.0.1:${SERVER_PORT}/actuator/health" || exit 1 ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /app/app.jar"] diff --git a/docs/test-environment-deployment.md b/docs/test-environment-deployment.md new file mode 100644 index 000000000..017c1d474 --- /dev/null +++ b/docs/test-environment-deployment.md @@ -0,0 +1,90 @@ +# 头程测试环境部署说明 + +## 1. 部署范围 + +测试服务器使用两套 Compose 文件: + +- `docker-compose-infra.yml`:启动 MySQL、Redis、Nacos,只需在基础设施变化时执行。 +- `deploy/docker-compose.yml`:启动 11 个头程业务服务,由 Jenkins 增量部署。 + +当前方案假设 Jenkins 使用测试服务器的 Docker 守护进程。Jenkins 构建节点如果不在测试服务器,`DEPLOY=true` 不会把服务部署到目标测试服务器,需要改为专用节点或 SSH 远程部署。 + +## 2. 测试镜像策略 + +测试环境不登录、不推送、不拉取远程容器镜像仓库。Jenkins 在测试服务器的 Docker 节点直接构建本机镜像,镜像格式为: + +```text +baiyue-firstleg-test/<服务名>: +``` + +随后由 `deploy/docker-compose.yml` 直接启动这些本机镜像。该方案不需要修改 Docker 守护进程安全策略,也不依赖当前 HTTP Gitea Registry。 + +预发布和生产环境仍会推送远程 Registry,正式启用前必须配置可信 HTTPS 域名和证书。 + +## 3. 启动测试基础设施 + +复制基础设施环境模板: + +```bash +cp deploy/env/.env.infra-test.example .env +``` + +填写真实的 MySQL 和 Redis 测试密码后执行: + +```bash +docker compose --env-file .env -f docker-compose-infra.yml up -d +docker compose --env-file .env -f docker-compose-infra.yml ps +``` + +应启动: + +```text +firstleg-test-nacos +firstleg-test-mysql +firstleg-test-redis +``` + +同时创建共享网络: + +```text +firstleg-test-infra-network +``` + +## 4. Jenkins 测试环境凭据 + +Jenkins 必须存在: + +| ID | 类型 | 用途 | +| --- | --- | --- | +| `gitea-test-token` | Username with password | 从 Gitea 拉取代码 | +| `firstleg-test-env` | Secret file | 测试业务容器的数据库、Redis、Nacos 和安全配置 | + +`firstleg-test-env` 根据 `deploy/env/.env.test.example` 创建。共享网络内使用以下服务名: + +```text +MySQL:mysql:3306 +Redis:redis:6379 +Nacos:nacos:8848 +``` + +## 5. Jenkins 参数 + +首次构建全部测试镜像并直接启动: + +```text +BUILD_MODE=ALL +ENVIRONMENT=test +DEPLOY=true +SKIP_TESTS=false +IMAGE_REPOSITORY=测试环境会自动忽略此参数 +``` + +只构建镜像但不启动服务时使用: + +```text +BUILD_MODE=SELECT 或 ALL +ENVIRONMENT=test +DEPLOY=false +``` + +“生产环境部署确认(仅 production 执行)”在测试流水线日志中会显示为 `skipped`,这是正常行为,不代表流水线尝试部署生产环境。