chore(ci): 统一预发环境命名 staging → release
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled

- env/staging.env.example → env/release.env.example(git mv 保留历史)
- Jenkinsfile:STAGING_DEPLOY_HOST/PATH → RELEASE_*,日志和注释同步
- docker-compose.core.yml、5 个 application.yaml 注释里的 staging → release
- TDengine database:aiot_platform_staging → aiot_platform_release
- XXL-Job appname 后缀:-staging → -release

仅命名调整,不动任何运行行为。
This commit is contained in:
lzh
2026-04-28 16:45:11 +08:00
parent 602217274c
commit 7c45f56804
8 changed files with 26 additions and 26 deletions

20
Jenkinsfile vendored
View File

@@ -29,14 +29,14 @@ pipeline {
// 服务配置
CORE_SERVICES = 'viewsh-gateway,viewsh-module-system-server,viewsh-module-infra-server,viewsh-module-iot-server,viewsh-module-iot-gateway,viewsh-module-ops-server'
// 部署配置(默认 Prodrelease/next 分支会在 Initialize 阶段覆盖为 Staging
// 部署配置(默认 Prodrelease/next 分支会在 Initialize 阶段覆盖为 Release
DEPLOY_HOST = '172.17.16.14'
DEPLOY_PATH = '/opt/aiot-platform-cloud'
SSH_KEY = '/var/jenkins_home/.ssh/id_rsa'
// Staging 服务器配置
STAGING_DEPLOY_HOST = '172.17.16.7'
STAGING_DEPLOY_PATH = '/opt/aiot-platform-cloud'
// Release 服务器配置
RELEASE_DEPLOY_HOST = '172.17.16.7'
RELEASE_DEPLOY_PATH = '/opt/aiot-platform-cloud'
// 磁盘守护阈值(%):低于 MIN 直接 fail低于 WARN 仅告警
DISK_FREE_MIN_PCT = '5'
@@ -78,9 +78,9 @@ pipeline {
// 根据分支选择部署目标
if (env.BRANCH_NAME == 'release/next') {
env.DEPLOY_HOST = env.STAGING_DEPLOY_HOST
env.DEPLOY_PATH = env.STAGING_DEPLOY_PATH
echo "📦 Deploy target: STAGING (${env.DEPLOY_HOST})"
env.DEPLOY_HOST = env.RELEASE_DEPLOY_HOST
env.DEPLOY_PATH = env.RELEASE_DEPLOY_PATH
echo "📦 Deploy target: RELEASE (${env.DEPLOY_HOST})"
} else {
echo "📦 Deploy target: PRODUCTION (${env.DEPLOY_HOST})"
}
@@ -427,7 +427,7 @@ pipeline {
def stageStartTime = System.currentTimeMillis()
echo "🧹 Cleaning up old images (keep=${env.IMAGE_KEEP_COUNT})"
// Prod/Staging 本地:清旧镜像 + dangling + builder cache
// Prod/Release 本地:清旧镜像 + dangling + builder cache
cleanupDeployHost(env.DEPLOY_HOST, env.IMAGE_KEEP_COUNT)
// Registry按保留策略删 manifest + 触发 GC 释放磁盘
@@ -1177,13 +1177,13 @@ def checkRemoteEnvFileOrFail(String host, String deployPath) {
error("""❌ ${host}:${deployPath}/.env 不存在!
请先在部署机上手工放置环境变量文件(敏感凭据不进 git
- prod 模板env/prod.env.example
- staging 模板env/staging.env.example
- release 模板env/release.env.example
拷贝模板到 ${deployPath}/.env 并填好密码、CTSDB 凭据等占位符后再触发部署。""")
}
echo " ✅ ${host}:${deployPath}/.env 存在"
}
// Prod/Staging 本地清理:调用仓库内的 cleanup.sh
// Prod/Release 本地清理:调用仓库内的 cleanup.sh
def cleanupDeployHost(String host, String keep) {
def sshOpts = "-o StrictHostKeyChecking=no -o ConnectTimeout=10 -i ${env.SSH_KEY}"
try {

View File

@@ -46,7 +46,7 @@ x-common-env: &common-env
ROCKETMQ_SECRET_KEY: ${ROCKETMQ_SECRET_KEY:-sk82108944bc0997f7}
# ===== XXL-Job =====
# 注意XXL_JOB_EXECUTOR_APPNAME 用来区分 prod/staging 在同一 admin 下的执行器组
# 注意XXL_JOB_EXECUTOR_APPNAME 用来区分 prod/release 在同一 admin 下的执行器组
# (后端 application.yaml 需要支持 ${XXL_JOB_EXECUTOR_APPNAME:${spring.application.name}}
XXL_JOB_ADMIN_ADDRESSES: ${XXL_JOB_ADMIN_ADDRESSES:-http://172.17.16.7:19090/xxl-job-admin}
XXL_JOB_EXECUTOR_IP: ${XXL_JOB_EXECUTOR_IP:-172.17.16.14}
@@ -146,7 +146,7 @@ services:
JAVA_OPTS: "-Xms1024m -Xmx2048m -XX:+UseContainerSupport -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/app/logs"
# ===== 时序库iot-server 独有)=====
# prod 用 TDengine172.17.16.7:6041staging 用腾讯云 CTSDBInfluxDB 兼容)
# prod 用 TDengine172.17.16.7:6041release 用腾讯云 CTSDBInfluxDB 兼容)
# 通过 TSDB_TYPE 切换tdengine | ctsdb
TSDB_TYPE: ${TSDB_TYPE:-tdengine}
TDENGINE_HOST: ${TDENGINE_HOST:-172.17.16.7}

View File

@@ -1,5 +1,5 @@
# ============================================
# 预发布环境(STAGING)环境变量模板
# 预发布环境(RELEASE)环境变量模板
# ============================================
# 部署机使用方式:
# 1) 拷贝到 172.17.16.7 的 /opt/aiot-platform-cloud/.env
@@ -28,7 +28,7 @@ REDIS_HOST=172.17.16.13
REDIS_PORT=6379
REDIS_PASSWORD=<REDIS_PASSWORD>
# ===== RocketMQstaging 服务器本地部署的 1Panel-rocketmq-ZQQi 实例,内网地址)=====
# ===== RocketMQrelease 服务器本地部署的 1Panel-rocketmq-ZQQi 实例,内网地址)=====
# 1Panel 上 namesrv 容器对外端口(请按实际 1Panel 暴露端口校正,默认 9876
ROCKETMQ_NAMESRV_ADDR=172.17.16.7:9876
# 自部署 RocketMQ 通常无 ACL留空即可如启用了 ACL 再填
@@ -36,16 +36,16 @@ ROCKETMQ_ACCESS_KEY=
ROCKETMQ_SECRET_KEY=
# ===== 时序库 =====
# TODO: staging 计划用腾讯云 CTSDBInfluxDB 兼容),但当前后端 application-prod.yaml 仍写死
# TODO: release 计划用腾讯云 CTSDBInfluxDB 兼容),但当前后端 application-prod.yaml 仍写死
# TDengine 的 jdbc:TAOS-RS 协议;切到 CTSDB 需要后端代码层改造(双引擎抽象在
# framework/tsdb/ 已有但 yaml 未启用切换)。短期方案:staging 共享 prod 的 TDengine
# framework/tsdb/ 已有但 yaml 未启用切换)。短期方案:release 共享 prod 的 TDengine
# 实例172.17.16.7:6041通过独立 database 名隔离。
TSDB_TYPE=tdengine
TDENGINE_HOST=172.17.16.7
TDENGINE_PORT=6041
TDENGINE_USERNAME=root
TDENGINE_PASSWORD=<TDENGINE_PASSWORD>
TDENGINE_DATABASE=aiot_platform_staging
TDENGINE_DATABASE=aiot_platform_release
# CTSDB 切换 follow-up暂留空
CTSDB_URL=
CTSDB_USERNAME=
@@ -53,13 +53,13 @@ CTSDB_PASSWORD=
CTSDB_DATABASE=
# ===== XXL-Job =====
# 共用 prod 的 adminhttp://172.17.16.7:19090但用 -staging 后缀区分执行器组
# 否则 admin 调度任务会同时打到 prod 和 staging(同 appname 串台)
# 共用 prod 的 adminhttp://172.17.16.7:19090但用 -release 后缀区分执行器组
# 否则 admin 调度任务会同时打到 prod 和 release(同 appname 串台)
XXL_JOB_ADMIN_ADDRESSES=http://172.17.16.7:19090/xxl-job-admin
XXL_JOB_EXECUTOR_IP=172.17.16.7
XXL_JOB_EXECUTOR_APPNAME_SUFFIX=-staging
XXL_JOB_EXECUTOR_APPNAME_SUFFIX=-release
# ===== 微信(建议 staging 用沙箱号;先沿用 prod=====
# ===== 微信(建议 release 用沙箱号;先沿用 prod=====
WX_MP_APP_ID=wx5b23ba7a5589ecbb
WX_MP_SECRET=<WX_MP_SECRET>
WX_MINIAPP_APPID=wxc4598c446f8a9cb3

View File

@@ -122,7 +122,7 @@ spring:
xxl:
job:
executor:
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppNameSUFFIX 在 staging 设为 -stagingprod 留空)
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppNameSUFFIX 在 release 设为 -releaseprod 留空)
logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径
accessToken: default_token # 执行器通讯TOKEN

View File

@@ -122,7 +122,7 @@ spring:
xxl:
job:
executor:
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppNameSUFFIX 在 staging 设为 -stagingprod 留空)
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppNameSUFFIX 在 release 设为 -releaseprod 留空)
logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径
accessToken: default_token # 执行器通讯TOKEN

View File

@@ -115,7 +115,7 @@ spring:
xxl:
job:
executor:
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppNameSUFFIX 在 staging 设为 -stagingprod 留空)
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppNameSUFFIX 在 release 设为 -releaseprod 留空)
logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径
accessToken: default_token # 执行器通讯TOKEN

View File

@@ -122,7 +122,7 @@ spring:
xxl:
job:
executor:
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppNameSUFFIX 在 staging 设为 -stagingprod 留空)
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppNameSUFFIX 在 release 设为 -releaseprod 留空)
logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径
accessToken: default_token # 执行器通讯TOKEN

View File

@@ -104,7 +104,7 @@ easy-trans:
xxl:
job:
executor:
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppNameSUFFIX 在 staging 设为 -stagingprod 留空)
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppNameSUFFIX 在 release 设为 -releaseprod 留空)
logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径
accessToken: default_token # 执行器通讯TOKEN