chore(ci): 统一预发环境命名 staging → release
- 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:
20
Jenkinsfile
vendored
20
Jenkinsfile
vendored
@@ -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'
|
||||
|
||||
// 部署配置(默认 Prod,release/next 分支会在 Initialize 阶段覆盖为 Staging)
|
||||
// 部署配置(默认 Prod,release/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 {
|
||||
|
||||
@@ -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 用 TDengine(172.17.16.7:6041),staging 用腾讯云 CTSDB(InfluxDB 兼容)
|
||||
# prod 用 TDengine(172.17.16.7:6041),release 用腾讯云 CTSDB(InfluxDB 兼容)
|
||||
# 通过 TSDB_TYPE 切换:tdengine | ctsdb
|
||||
TSDB_TYPE: ${TSDB_TYPE:-tdengine}
|
||||
TDENGINE_HOST: ${TDENGINE_HOST:-172.17.16.7}
|
||||
|
||||
@@ -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>
|
||||
|
||||
# ===== RocketMQ(用 staging 服务器本地部署的 1Panel-rocketmq-ZQQi 实例,内网地址)=====
|
||||
# ===== RocketMQ(用 release 服务器本地部署的 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 计划用腾讯云 CTSDB(InfluxDB 兼容),但当前后端 application-prod.yaml 仍写死
|
||||
# TODO: release 计划用腾讯云 CTSDB(InfluxDB 兼容),但当前后端 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 的 admin(http://172.17.16.7:19090),但用 -staging 后缀区分执行器组
|
||||
# 否则 admin 调度任务会同时打到 prod 和 staging(同 appname 串台)
|
||||
# 共用 prod 的 admin(http://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
|
||||
@@ -122,7 +122,7 @@ spring:
|
||||
xxl:
|
||||
job:
|
||||
executor:
|
||||
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppName(SUFFIX 在 staging 设为 -staging,prod 留空)
|
||||
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppName(SUFFIX 在 release 设为 -release,prod 留空)
|
||||
logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径
|
||||
accessToken: default_token # 执行器通讯TOKEN
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@ spring:
|
||||
xxl:
|
||||
job:
|
||||
executor:
|
||||
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppName(SUFFIX 在 staging 设为 -staging,prod 留空)
|
||||
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppName(SUFFIX 在 release 设为 -release,prod 留空)
|
||||
logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径
|
||||
accessToken: default_token # 执行器通讯TOKEN
|
||||
|
||||
|
||||
@@ -115,7 +115,7 @@ spring:
|
||||
xxl:
|
||||
job:
|
||||
executor:
|
||||
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppName(SUFFIX 在 staging 设为 -staging,prod 留空)
|
||||
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppName(SUFFIX 在 release 设为 -release,prod 留空)
|
||||
logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径
|
||||
accessToken: default_token # 执行器通讯TOKEN
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@ spring:
|
||||
xxl:
|
||||
job:
|
||||
executor:
|
||||
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppName(SUFFIX 在 staging 设为 -staging,prod 留空)
|
||||
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppName(SUFFIX 在 release 设为 -release,prod 留空)
|
||||
logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径
|
||||
accessToken: default_token # 执行器通讯TOKEN
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@ easy-trans:
|
||||
xxl:
|
||||
job:
|
||||
executor:
|
||||
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppName(SUFFIX 在 staging 设为 -staging,prod 留空)
|
||||
appname: ${spring.application.name}${XXL_JOB_EXECUTOR_APPNAME_SUFFIX:} # 执行器 AppName(SUFFIX 在 release 设为 -release,prod 留空)
|
||||
logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径
|
||||
accessToken: default_token # 执行器通讯TOKEN
|
||||
|
||||
|
||||
Reference in New Issue
Block a user