#!/bin/bash # deploy-with-cleanup.sh # Helm部署脚本,内置cleanup-on-fail和自动清理旧RS set -e RELEASE_NAME="shop-recycle" CHART_PATH="./" ENVIRONMENT="${1:-dev}" # 默认dev环境 case $ENVIRONMENT in dev) VALUES_FILE="environments/dev-values.yaml" ;; staging) VALUES_FILE="environments/staging-values.yaml" ;; prod) VALUES_FILE="environments/prod-values.yaml" ;; *) echo "未知环境: $ENVIRONMENT" echo "用法: ./deploy-with-cleanup.sh [dev|staging|prod]" exit 1 ;; esac echo "==========================================" echo "部署配置:" echo "Release: $RELEASE_NAME" echo "环境: $ENVIRONMENT" echo "Values文件: $VALUES_FILE" echo "==========================================" # 检查Helm Release是否存在 if helm status $RELEASE_NAME > /dev/null 2>&1; then echo "升级现有Release..." helm upgrade $RELEASE_NAME $CHART_PATH \ -f $VALUES_FILE \ --cleanup-on-fail \ --timeout 5m \ --wait echo "等待2秒后清理旧的ReplicaSets..." sleep 2 # 清理旧的ReplicaSets(只保留3个最新版本) echo "清理旧的ReplicaSets..." kubectl delete rs --field-selector=status.replicas=0 -l project=shop-recycle || true else echo "安装新Release..." helm install $RELEASE_NAME $CHART_PATH \ -f $VALUES_FILE \ --timeout 5m \ --wait fi echo "==========================================" echo "部署完成!" echo "==========================================" echo "" echo "验证部署状态:" helm status $RELEASE_NAME echo "" echo "查看Pods:" kubectl get pods -l project=shop-recycle -o wide