在写自动化部署脚本的时候,环境变量是个绕不开的细节。就像做饭前得先把调料备齐,脚本运行前也得把配置信息安排明白。很多人图省事直接把数据库地址、API密钥这些硬编码进脚本,结果换台机器就出问题,跟拿错酱油瓶做菜一个道理——味道全变了。
为什么非得用环境变量?
举个例子,你在家用的盐是一包500克的,可厨房教学视频里用的是散装盐。如果视频写死“加一勺盐”,观众自己就得琢磨这“一勺”到底对应多少克。同理,开发环境和线上服务器的数据库地址肯定不一样,脚本要是不通过环境变量区分,部署时就得手动改代码,容易出错还麻烦。
怎么设才顺手?
常见的做法是在项目根目录放个 .env 文件,里面写好键值对:
DB_HOST=localhost
API_KEY=abc123xyz
NODE_ENV=production
然后在部署脚本里读取。比如用 Bash 写的脚本,可以这样加载:
if [ -f .env ]; then
export $(cat .env | xargs)
fi
echo "正在连接 $DB_HOST..."
Python 脚本可以用 python-dotenv 库,Node.js 有 dotenv 模块,原理都差不多:先载入文件,再注入到运行环境中。
敏感信息别往代码库里推
就像不会把家门钥匙贴在冰箱上,.env 文件一定得加到 .gitignore 里。新同事要跑项目,你口头或私信告诉他当前环境的配置就行。线上服务器可以通过 CI/CD 平台(比如 GitHub Actions 或 Jenkins)在运行时注入变量,完全不用碰文件。
多个环境怎么管?
有些团队会建 .env.staging 和 .env.production,部署时根据目标环境复制对应的文件成 .env。更稳妥的方式是让脚本直接接收参数,比如:
./deploy.sh --env production
脚本内部判断参数,自动加载不同配置,避免人为复制粘贴出错。
环境变量设得好,下次换人接手、迁移服务器,甚至半夜上线修复 bug,都能少踩几个坑,就像厨房里的调味架摆得清楚,炒菜时伸手就来,不慌不乱。