一键部署脚本需要考虑哪些环境变量

wen 实用脚本 2

本文目录导读:

一键部署脚本需要考虑哪些环境变量

  1. 核心必选环境变量
  2. 构建与打包配置
  3. 运行时环境
  4. 通知与监控
  5. 回滚与故障恢复
  6. 最佳实践建议
  7. 脚本中处理示例
  8. 不同场景典型变量组合

设计一键部署脚本时,环境变量的设计直接决定了脚本的灵活性、安全性和可移植性,以下是需要重点考虑的环境变量分类及具体建议:

核心必选环境变量

部署目标信息

# 目标服务器(SSH连接)
DEPLOY_HOST=192.168.1.100
DEPLOY_USER=deployer
DEPLOY_PORT=22
# 或本地路径
DEPLOY_LOCAL_PATH=/var/www/app

应用基本信息

APP_NAME=my-web-app
APP_VERSION=1.2.0
BUILD_ENV=production    # production/staging/testing

凭据与安全

# SSH密钥
SSH_PRIVATE_KEY_PATH=~/.ssh/id_rsa
# 或密码(不推荐,优先密钥)
DEPLOY_PASSWORD=
# API密钥(重要)
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
DOCKER_REGISTRY_PASSWORD=

构建与打包配置

源码与构建

# Git仓库
GIT_REPO_URL=https://github.com/user/repo.git
GIT_BRANCH=main
GIT_TAG=v1.2.0          # 优先于分支
# 构建命令
BUILD_COMMAND="npm run build"
BUILD_OUTPUT_DIR=dist/   # 要上传的目录
BUILD_ARTIFACTS=*.jar    # 或特定文件模式

Docker 相关

DOCKER_IMAGE_NAME=myapp
DOCKER_IMAGE_TAG=latest
DOCKERFILE_PATH=./Dockerfile
DOCKER_COMPOSE_FILE=docker-compose.prod.yml
DOCKER_REGISTRY=docker.io/user

运行时环境

应用配置

# 数据库
DB_HOST=localhost
DB_PORT=3306
DB_NAME=myapp
DB_USER=app_user
DB_PASSWORD=secret
# 缓存
REDIS_HOST=localhost
REDIS_PORT=6379
# 消息队列
RABBITMQ_HOST=
KAFKA_BOOTSTRAP_SERVERS=

服务发现与网络

# Kubernetes
KUBE_NAMESPACE=production
KUBE_CONTEXT=prod-cluster
KUBE_DEPLOYMENT=myapp-deployment
# 反向代理
NGINX_SITES_AVAILABLE=/etc/nginx/sites-available/
DOMAIN_NAME=example.com
SSL_CERT_PATH=/etc/ssl/certs/

通知与监控

告警渠道

# Slack
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/XXX
SLACK_CHANNEL=#deployments
# 邮件
ADMIN_EMAIL=admin@example.com
SMTP_SERVER=smtp.example.com

监控集成

# Datadog
DD_API_KEY=
DD_APP_KEY=
DD_SITE=datadoghq.com
# Sentry
SENTRY_DSN=
SENTRY_ORG=
SENTRY_PROJECT=

回滚与故障恢复

备份相关

BACKUP_DIR=/opt/backups
ROLLBACK_VERSION=v1.1.0  # 指定回滚到哪个版本
KEEP_RELEASES=5          # 保留最近几个版本

最佳实践建议

变量命名规范

  • 全部大写,用下划线分隔:DEPLOY_HOST
  • 有意义的命名:DB_MASTER_HOST 而非 DBHOST
  • 避免默认值冲突:使用 提供安全默认值

安全管理

# ✅ 推荐:从文件读取敏感信息
DB_PASSWORD=$(cat /run/secrets/db_password)
# ❌ 避免:直接在环境变量明文书写
export DB_PASSWORD="mysecret"  # 不安全

分层设计建议

# 必须 (硬依赖)
DEPLOY_HOST
BUILD_ENV
APP_NAME
# 可选 (有默认值)
DEPLOY_PORT=${DEPLOY_PORT:-22}
KEEP_RELEASES=${KEEP_RELEASES:-5}
# 条件 (特定场景需要)
# Docker部署需要
DOCKER_REGISTRY_PASSWORD
# K8s部署需要
KUBE_NAMESPACE

示例 .env 文件模板

# .env.example (不含真实密码)
APP_NAME=myapp
BUILD_ENV=production
DEPLOY_HOST=192.168.1.100
DEPLOY_USER=deployer
# 敏感变量由CI/CD注入
# DB_PASSWORD 通过 vault secrets 注入
# SSH_KEY 通过环境变量传入

脚本中处理示例

#!/bin/bash
set -euo pipefail
# 1. 验证必需变量
required_vars=(
    "DEPLOY_HOST"
    "BUILD_ENV"
    "APP_NAME"
)
for var in "${required_vars[@]}"; do
    if [[ -z "${!var:-}" ]]; then
        echo "错误: 环境变量 $var 未设置"
        exit 1
    fi
done
# 2. 设置默认值
DEPLOY_PORT=${DEPLOY_PORT:-22}
KEEP_RELEASES=${KEEP_RELEASES:-5}
# 3. 敏感变量从文件读取(如果存在)
if [[ -f /run/secrets/db_password ]]; then
    DB_PASSWORD=$(cat /run/secrets/db_password)
fi
# 4. 部署逻辑
echo "开始部署 $APP_NAME 到 $DEPLOY_HOST..."

不同场景典型变量组合

部署类型 必需变量 可选变量
裸机/Nginx DEPLOY_HOST, BUILD_OUTPUT_DIR NGINX_SITES_AVAILABLE
Docker DOCKER_IMAGE_NAME, DOCKERFILE_PATH DOCKER_COMPOSE_FILE
K8s KUBE_NAMESPACE, KUBE_CONTEXT KUBE_DEPLOYMENT
函数计算 FUNCTION_NAME, RUNTIME HANDLER, TIMEOUT

通过合理设计环境变量,可以让你的一键部署脚本同时兼顾灵活性、安全性和可维护性,适用于多环境(开发/测试/生产)和多架构(容器/虚拟机/物理机)部署。

抱歉,评论功能暂时关闭!