如何从单一代码库为B2B客户端构建时注入数据库名等配置?
多客户端独立配置注入方案(B2B应用)
方案1:配置模板+Shell脚本(最简无依赖)
这是零额外工具依赖的最直接方案,适合本地批量构建:
- 第一步:创建配置模板文件
config.template.json,预留占位符:
{ "dbname": "{{DB_NAME}}" }
- 第二步:为每个客户端创建独立的环境变量文件,比如
client-corpa.env:
DB_NAME=corpa
client-corpb.env及其他客户端文件同理,仅需修改DB_NAME值。
- 第三步:编写Shell脚本
build-client.sh,负责加载配置、替换模板并执行构建:
#!/bin/bash if [ -z "$1" ]; then echo "用法: ./build-client.sh <客户端标识> [debug/release]" exit 1 fi CLIENT_ID=$1 BUILD_TYPE=${2:-debug} # 加载客户端配置 if [ ! -f "client-${CLIENT_ID}.env" ]; then echo "错误:未找到客户端${CLIENT_ID}的配置文件" exit 1 fi source "client-${CLIENT_ID}.env" # 生成隔离的配置文件 OUTPUT_DIR="build/${BUILD_TYPE}/${CLIENT_ID}" mkdir -p $OUTPUT_DIR sed "s/{{DB_NAME}}/${DB_NAME}/g" config.template.json > "${OUTPUT_DIR}/config.json" # 执行实际构建命令(替换为你的项目构建指令,如gradle、npm run build等) echo "开始构建${CLIENT_ID}的${BUILD_TYPE}版本..." # 示例:npm run build -- --mode ${BUILD_TYPE} --config ${OUTPUT_DIR}/config.json
- 使用方式:本地构建时直接运行
./build-client.sh corpa release,脚本会自动生成对应客户端的配置,并将构建产物输出到独立目录,彻底避免混淆。
方案2:环境变量直接注入(适配本地/CI)
如果你的构建工具支持读取环境变量,可跳过模板文件,直接在代码中获取配置:
- 代码中读取环境变量(以Node.js为例):
const config = { dbname: process.env.DB_NAME || 'default' };
- 本地构建时直接在命令行指定变量:
# 构建客户A的Debug版本 DB_NAME=corpa npm run build:debug # 构建客户B的Release版本 DB_NAME=corpb npm run build:release
- 批量管理优化:可把所有客户端的构建命令写入
Makefile:
corpa-debug: DB_NAME=corpa npm run build:debug corpa-release: DB_NAME=corpa npm run build:release corpb-debug: DB_NAME=corpb npm run build:debug # 其他客户端命令依次添加...
使用时只需运行make corpa-release即可。
方案3:结合Fastlane自动化(适配批量部署)
基于你正在使用的Fastlane,可将配置整合到Fastfile实现一键构建:
- Fastfile示例:
lane :build_client do |options| client_id = options[:client_id] build_type = options[:build_type] || "debug" # 从统一配置文件加载客户端信息 client_config = YAML.load_file("clients.yml")[client_id] unless client_config UI.error("未找到客户端#{client_id}的配置") exit 1 end # 设置环境变量 ENV["DB_NAME"] = client_config["dbname"] # 执行构建 sh "npm run build:#{build_type}" # 归档隔离的构建产物 sh "mkdir -p builds/#{build_type}/#{client_id}" sh "cp -r dist/* builds/#{build_type}/#{client_id}/" end
- 统一客户端配置文件
clients.yml:
corpa: dbname: corpa corpb: dbname: corpb # 其余50个客户端配置依次添加...
- 使用方式:
fastlane build_client client_id:corpa build_type:release
核心注意事项
- 配置隔离:客户端专属配置文件需加入
.gitignore,仅提交模板、脚本和统一配置清单。 - 产物隔离:所有构建产物必须输出到客户端+构建类型的独立目录,禁止混存。
- 零硬编码:代码中绝对不能出现任何客户端专属配置,全部通过注入方式获取。
内容的提问来源于stack exchange,提问作者AutoM8R
相关产品推荐
相关产品推荐

