deploy-with-cleanup.sh 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/bin/bash
  2. # deploy-with-cleanup.sh
  3. # Helm部署脚本,内置cleanup-on-fail和自动清理旧RS
  4. set -e
  5. RELEASE_NAME="shop-recycle"
  6. CHART_PATH="./"
  7. ENVIRONMENT="${1:-dev}" # 默认dev环境
  8. case $ENVIRONMENT in
  9. dev)
  10. VALUES_FILE="environments/dev-values.yaml"
  11. ;;
  12. staging)
  13. VALUES_FILE="environments/staging-values.yaml"
  14. ;;
  15. prod)
  16. VALUES_FILE="environments/prod-values.yaml"
  17. ;;
  18. *)
  19. echo "未知环境: $ENVIRONMENT"
  20. echo "用法: ./deploy-with-cleanup.sh [dev|staging|prod]"
  21. exit 1
  22. ;;
  23. esac
  24. echo "=========================================="
  25. echo "部署配置:"
  26. echo "Release: $RELEASE_NAME"
  27. echo "环境: $ENVIRONMENT"
  28. echo "Values文件: $VALUES_FILE"
  29. echo "=========================================="
  30. # 检查Helm Release是否存在
  31. if helm status $RELEASE_NAME > /dev/null 2>&1; then
  32. echo "升级现有Release..."
  33. helm upgrade $RELEASE_NAME $CHART_PATH \
  34. -f $VALUES_FILE \
  35. --cleanup-on-fail \
  36. --timeout 5m \
  37. --wait
  38. echo "等待2秒后清理旧的ReplicaSets..."
  39. sleep 2
  40. # 清理旧的ReplicaSets(只保留3个最新版本)
  41. echo "清理旧的ReplicaSets..."
  42. kubectl delete rs --field-selector=status.replicas=0 -l project=shop-recycle || true
  43. else
  44. echo "安装新Release..."
  45. helm install $RELEASE_NAME $CHART_PATH \
  46. -f $VALUES_FILE \
  47. --timeout 5m \
  48. --wait
  49. fi
  50. echo "=========================================="
  51. echo "部署完成!"
  52. echo "=========================================="
  53. echo ""
  54. echo "验证部署状态:"
  55. helm status $RELEASE_NAME
  56. echo ""
  57. echo "查看Pods:"
  58. kubectl get pods -l project=shop-recycle -o wide