Azure VM软件部署Shell脚本多环境参数配置方案咨询
方案合理性评估
你的原有方案是合理的,核心思路是执行逻辑与环境配置分离,符合DevOps配置管理的基础规范,能够有效避免多环境下硬编码参数导致的维护成本高、发版出错等问题。
可优化点
原有方案存在几处可以改进的风险点:
- 全量同步所有环境配置到VM,会导致生产环境敏感参数泄露到非生产环境,存在安全风险
- 缺少入参合法性校验、配置文件存在性校验,容易出现传参错误、配置缺失导致脚本执行异常
- 敏感参数明文存储在Git仓库,有泄露风险
优化后实现方案
建议做以下调整:
- 配置文件按环境命名为
dev.param/qa.param/prod.param,CI/CD部署时仅同步对应环境的配置文件到目标VM,不要全量同步 - 敏感类参数(密码、Token等)存储到Azure Key Vault,脚本运行时通过Azure CLI拉取,不要明文存储在配置文件中
- 脚本中增加完整的校验逻辑,避免异常执行
示例代码
install_software.sh 完整示例
#!/bin/bash set -euo pipefail # 入参合法性校验 if [ $# -ne 1 ]; then echo "用法: $0 <环境名称: DEV/QA/PROD>" exit 1 fi ENV=$(echo "$1" | tr '[:lower:]' '[:upper:]') ALLOWED_ENVS=("DEV" "QA" "PROD") if ! [[ " ${ALLOWED_ENVS[*]} " =~ " ${ENV} " ]]; then echo "错误: 不支持的环境 ${ENV},仅允许传入 DEV/QA/PROD" exit 1 fi # 配置文件存在性校验 CONFIG_FILE="./${ENV,,}.param" if [ ! -f "${CONFIG_FILE}" ]; then echo "错误: ${ENV} 环境配置文件 ${CONFIG_FILE} 不存在,请检查部署结果" exit 1 fi # 加载并export配置参数 echo "正在加载 ${ENV} 环境配置..." set -a # shellcheck source=/dev/null source "${CONFIG_FILE}" set +a # 必要参数校验 REQUIRED_PARAMS=("INSTALLATION_PATH" "INSTALLER_LOCATION") for param in "${REQUIRED_PARAMS[@]}"; do if [ -z "${!param:-}" ]; then echo "错误: 配置文件缺失必要参数 ${param}" exit 1 fi done # 敏感参数拉取示例(提前为VM分配有权限访问Key Vault的托管身份即可免密拉取) # DB_PASSWORD=$(az keyvault secret show --name "db-password" --vault-name "你的Key Vault名称" --query "value" -o tsv) # export DB_PASSWORD # 以下为你的业务安装逻辑 echo "配置加载完成,安装路径:${INSTALLATION_PATH},安装包地址:${INSTALLER_LOCATION}"
配置文件示例(dev.param)
INSTALLATION_PATH=/opt/dev/app INSTALLER_LOCATION=https://dev-storage.blob.core.chinacloudapi.cn/installer/app-v1.0.0.tar.gz
执行命令
chmod +x install_software.sh ./install_software.sh DEV
内容的提问来源于stack exchange,提问作者Noor Basha Shaik
相关产品推荐
相关产品推荐

