6945f194b5
.gitlab-ci.yml:契约与实体对账 / 后端编译 / 管理端类型检查与构建 / 学生端 H5 构建 /
接口断言(全套 E2E 打真库)/ 生产环境自检;密钥每次随机生成,顺带证明应用没有偷偷
依赖 dev 默认值。
ProdEnvCheck 是 EnvironmentPostProcessor,跑在任何 bean 之前,拦 6 类「配错了也能启动」;
判「没配」与「配了」要 try { getProperty } catch(F-86)——
getProperty 会解析占位符、失败就抛,只读 PropertySource 又读不到 env 的值。
删掉 Gi 模板残留的 GitHub Pages 工作流(远端是 GitLab、用 pnpm,且它发布的是没有 API 的静态页)。
验证:scripts/e2e-prodguard.py 9/9(三种误配形态都拒绝启动)。
88 lines
3.4 KiB
YAML
88 lines
3.4 KiB
YAML
# ═══════════════════════════════════════════════════════════
|
||
# 测试环境(test)
|
||
#
|
||
# 用途:CI 流水线里的 E2E(`scripts/e2e-*.py` 打真实接口)与联调环境。
|
||
#
|
||
# ⚠️⚠️ 这个文件**不含任何密钥**,全部由环境变量提供。
|
||
# 理由不是"洁癖":test 环境的库会被反复清空重建,
|
||
# 而**密钥不该跟着库一起被当成一次性的**。更实际的是 ——
|
||
# CI 上每次跑用**当次随机生成**的密钥(见 .gitlab-ci.yml),
|
||
# 这样才能证明"应用没有偷偷依赖某个 dev 默认值"。
|
||
#
|
||
# 必需的环境变量(缺任何一个都起不来,且报错会指名道姓):
|
||
# PG_HOST PG_PORT PG_DB PG_USER PG_PASSWORD
|
||
# REDIS_HOST REDIS_PORT REDIS_PASSWORD
|
||
# XT_JWT_SECRET XT_AES_KEY XT_HMAC_KEY XT_RSA_PRIVATE_KEY
|
||
# ═══════════════════════════════════════════════════════════
|
||
|
||
spring:
|
||
datasource:
|
||
# CI 里 PG 是 services 里的别名(默认 `postgres`),本地跑给 localhost 即可
|
||
url: jdbc:postgresql://${PG_HOST:localhost}:${PG_PORT:5432}/${PG_DB:filldb}?stringtype=unspecified
|
||
username: ${PG_USER:fill}
|
||
password: ${PG_PASSWORD}
|
||
data:
|
||
redis:
|
||
host: ${REDIS_HOST:localhost}
|
||
port: ${REDIS_PORT:6379}
|
||
password: ${REDIS_PASSWORD}
|
||
database: 0
|
||
flyway:
|
||
# test 允许 clean 后重建:每次流水线从一个空库开始,
|
||
# **这样才能验证"所有迁移从 V1 依次跑到最新"是通的** ——
|
||
# 而增量环境里永远验不到这件事(旧库已经是最新了)
|
||
clean-disabled: false
|
||
web:
|
||
resources:
|
||
# H5 产物在 CI 里是构建出来的;本地指向同一个相对路径
|
||
static-locations: ${H5_STATIC_DIR:file:../frontend-mp/dist/build/h5/},classpath:/static/
|
||
|
||
logging:
|
||
level:
|
||
root: info
|
||
cn.tianbaotong.fill: info
|
||
# CI 日志里带 SQL 会淹没断言输出,所以 test 不打开 SQL 日志
|
||
|
||
fill:
|
||
jwt:
|
||
secret: ${XT_JWT_SECRET}
|
||
crypto:
|
||
aes-key: ${XT_AES_KEY}
|
||
hmac-key: ${XT_HMAC_KEY}
|
||
rsa:
|
||
private-key: ${XT_RSA_PRIVATE_KEY}
|
||
|
||
storage:
|
||
# ⚠️ test 用 local 是**刻意的**:CI 里没有对象存储,而且
|
||
# "上传→取回→预览"这条链路用本地磁盘就能完整验证。
|
||
# 真实验证七牛要走 staging(那需要真凭据),见 docs/09-部署与运维.md
|
||
provider: ${XT_STORAGE_PROVIDER:local}
|
||
keep-raw: ${XT_STORAGE_KEEP_RAW:false}
|
||
self-check-on-startup: false
|
||
|
||
mini-program:
|
||
app-id: ${WX_MP_APP_ID:}
|
||
app-secret: ${WX_MP_APP_SECRET:}
|
||
env-version: develop
|
||
|
||
mp-h5:
|
||
app-id: ${WX_H5_APP_ID:}
|
||
app-secret: ${WX_H5_APP_SECRET:}
|
||
callback-url: ${WX_H5_CALLBACK:http://localhost:8080/api/v1/mp/h5/callback}
|
||
h5-base-url: ${WX_H5_BASE_URL:http://localhost:8080}
|
||
# ⚠️ test 允许打桩登录(E2E 里有 23 条断言靠它跑 H5 授权链路)。
|
||
# 它只在**非生产**可用:代码里另有一道"profile 不含 prod"的判断。
|
||
stub-enabled: ${WX_H5_STUB:true}
|
||
|
||
tenant-domain:
|
||
enabled: ${XT_TENANT_DOMAIN_ENABLED:false}
|
||
base: ${XT_TENANT_DOMAIN_BASE:localhost}
|
||
scheme: http
|
||
|
||
# test 也开 Swagger:联调的人要用它照着调
|
||
springdoc:
|
||
api-docs:
|
||
enabled: true
|
||
swagger-ui:
|
||
enabled: true
|