#!/bin/bash ############################################################################## # WMS 微服务 K8s 部署脚本 # 用于一键部署 WMS 微服务到 Kubernetes 集群 ############################################################################## set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 配置变量 NAMESPACE="wms-system" REGISTRY_URL="registry.cn-beijing.aliyuncs.com/cpte-wms" IMAGE_TAG="${IMAGE_TAG:-latest}" DOCKER_BUILD="${DOCKER_BUILD:-true}" PUSH_IMAGE="${PUSH_IMAGE:-true}" # 打印信息 print_info() { echo -e "${BLUE}[INFO]${NC} $1" } print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查依赖 check_dependencies() { print_info "检查依赖工具..." if ! command -v docker &> /dev/null; then print_error "Docker 未安装,请先安装 Docker" exit 1 fi if ! command -v kubectl &> /dev/null; then print_error "kubectl 未安装,请先安装 kubectl" exit 1 fi if ! command -v mvn &> /dev/null; then print_warning "Maven 未安装,将跳过代码构建阶段" DOCKER_BUILD=false fi print_success "依赖检查通过" } # 构建 Docker 镜像 build_images() { if [ "$DOCKER_BUILD" != "true" ]; then print_warning "跳过 Docker 镜像构建" return fi print_info "开始构建 Docker 镜像..." # 基础服务 print_info "构建基础服务镜像..." cd cpte-wms-service/cpte-wms-basic-service docker build -t ${REGISTRY_URL}/wms-basic-service:${IMAGE_TAG} . cd ../.. # 入库服务 print_info "构建入库服务镜像..." cd cpte-wms-service/cpte-wms-inbound-service docker build -t ${REGISTRY_URL}/wms-inbound-service:${IMAGE_TAG} . cd ../.. # 出库服务 print_info "构建出库服务镜像..." cd cpte-wms-service/cpte-wms-outbound-service docker build -t ${REGISTRY_URL}/wms-outbound-service:${IMAGE_TAG} . cd ../.. # 库存服务 print_info "构建库存服务镜像..." cd cpte-wms-service/cpte-wms-inventory-service docker build -t ${REGISTRY_URL}/wms-inventory-service:${IMAGE_TAG} . cd ../.. # 调度服务 print_info "构建调度服务镜像..." cd cpte-wms-service/cpte-wms-schedule-service docker build -t ${REGISTRY_URL}/wms-schedule-service:${IMAGE_TAG} . cd ../.. print_success "Docker 镜像构建完成" } # 推送 Docker 镜像 push_images() { if [ "$PUSH_IMAGE" != "true" ]; then print_warning "跳过推送 Docker 镜像" return fi print_info "推送 Docker 镜像到仓库..." docker push ${REGISTRY_URL}/wms-basic-service:${IMAGE_TAG} docker push ${REGISTRY_URL}/wms-inbound-service:${IMAGE_TAG} docker push ${REGISTRY_URL}/wms-outbound-service:${IMAGE_TAG} docker push ${REGISTRY_URL}/wms-inventory-service:${IMAGE_TAG} docker push ${REGISTRY_URL}/wms-schedule-service:${IMAGE_TAG} print_success "Docker 镜像推送完成" } # 创建命名空间和资源 create_namespace() { print_info "创建 K8s 命名空间..." kubectl apply -f k8s/namespace.yaml print_success "命名空间创建完成" } # 创建配置和密钥 create_config() { print_info "创建 ConfigMap 和 Secret..." kubectl apply -f k8s/configmap.yaml kubectl apply -f k8s/secret.yaml print_success "配置创建完成" } # 部署服务 deploy_services() { print_info "部署 K8s Services..." kubectl apply -f k8s/services.yaml print_success "Services 部署完成" } # 部署应用 deploy_applications() { print_info "部署微服务应用..." # 基础服务 print_info "部署基础服务..." kubectl apply -f cpte-wms-service/cpte-wms-basic-service/k8s/deployment.yaml # 入库服务 print_info "部署入库服务..." kubectl apply -f cpte-wms-service/cpte-wms-inbound-service/k8s/deployment.yaml # 出库服务 print_info "部署出库服务..." kubectl apply -f cpte-wms-service/cpte-wms-outbound-service/k8s/deployment.yaml # 库存服务 print_info "部署库存服务..." kubectl apply -f cpte-wms-service/cpte-wms-inventory-service/k8s/deployment.yaml # 调度服务 print_info "部署调度服务..." kubectl apply -f cpte-wms-service/cpte-wms-schedule-service/k8s/deployment.yaml print_success "微服务应用部署完成" } # 部署 Ingress deploy_ingress() { print_info "部署 Ingress..." kubectl apply -f k8s/ingress.yaml print_success "Ingress 部署完成" } # 部署 HPA deploy_hpa() { print_info "部署 HPA 自动伸缩..." kubectl apply -f k8s/hpa.yaml print_success "HPA 部署完成" } # 检查部署状态 check_status() { print_info "检查部署状态..." sleep 10 print_info "查看 Pods 状态:" kubectl get pods -n ${NAMESPACE} -o wide print_info "查看 Services 状态:" kubectl get svc -n ${NAMESPACE} print_info "查看 Ingress 状态:" kubectl get ingress -n ${NAMESPACE} print_info "查看 HPA 状态:" kubectl get hpa -n ${NAMESPACE} } # 查看日志 view_logs() { SERVICE_NAME=$1 if [ -z "$SERVICE_NAME" ]; then print_error "请指定服务名称" echo "用法:$0 logs " echo "可用服务:basic, inbound, outbound, inventory, schedule" exit 1 fi print_info "查看 ${SERVICE_NAME} 服务日志..." kubectl logs -f deployment/wms-${SERVICE_NAME}-service -n ${NAMESPACE} } # 扩容服务 scale_service() { SERVICE_NAME=$1 REPLICAS=$2 if [ -z "$SERVICE_NAME" ] || [ -z "$REPLICAS" ]; then print_error "请指定服务名称和副本数" echo "用法:$0 scale " exit 1 fi print_info "扩容 ${SERVICE_NAME} 服务到 ${REPLICAS} 个副本..." kubectl scale deployment wms-${SERVICE_NAME}-service --replicas=${REPLICAS} -n ${NAMESPACE} print_success "扩容完成" } # 重启服务 restart_service() { SERVICE_NAME=$1 if [ -z "$SERVICE_NAME" ]; then print_error "请指定服务名称" echo "用法:$0 restart " exit 1 fi print_info "重启 ${SERVICE_NAME} 服务..." kubectl rollout restart deployment/wms-${SERVICE_NAME}-service -n ${NAMESPACE} print_success "重启完成" } # 卸载部署 undeploy() { print_warning "即将卸载所有 WMS 微服务..." read -p "确定继续吗?(y/n): " confirm if [ "$confirm" != "y" ]; then print_info "取消卸载" exit 0 fi print_info "删除 HPA..." kubectl delete -f k8s/hpa.yaml --ignore-not-found print_info "删除 Ingress..." kubectl delete -f k8s/ingress.yaml --ignore-not-found print_info "删除应用..." kubectl delete -f cpte-wms-service/cpte-wms-basic-service/k8s/deployment.yaml --ignore-not-found kubectl delete -f cpte-wms-service/cpte-wms-inbound-service/k8s/deployment.yaml --ignore-not-found kubectl delete -f cpte-wms-service/cpte-wms-outbound-service/k8s/deployment.yaml --ignore-not-found kubectl delete -f cpte-wms-service/cpte-wms-inventory-service/k8s/deployment.yaml --ignore-not-found kubectl delete -f cpte-wms-service/cpte-wms-schedule-service/k8s/deployment.yaml --ignore-not-found print_info "删除 Services..." kubectl delete -f k8s/services.yaml --ignore-not-found print_info "删除 ConfigMap 和 Secret..." kubectl delete -f k8s/configmap.yaml --ignore-not-found kubectl delete -f k8s/secret.yaml --ignore-not-found print_info "删除命名空间..." kubectl delete -f k8s/namespace.yaml --ignore-not-found print_success "卸载完成" } # 显示帮助 show_help() { echo "WMS 微服务 K8s 部署脚本" echo "" echo "用法:$0 " echo "" echo "命令:" echo " deploy 完整部署(构建镜像 + 推送 + 部署到 K8s)" echo " build 仅构建 Docker 镜像" echo " push 仅推送 Docker 镜像" echo " k8s 仅部署到 K8s(不构建和推送镜像)" echo " logs 查看服务日志" echo " scale 扩容服务" echo " restart 重启服务" echo " status 查看部署状态" echo " undeploy 卸载部署" echo " help 显示帮助信息" echo "" echo "示例:" echo " $0 deploy # 完整部署" echo " $0 build # 仅构建镜像" echo " $0 logs inbound # 查看入库服务日志" echo " $0 scale inbound 5 # 扩容入库服务到 5 个副本" echo " $0 restart inbound # 重启入库服务" echo "" echo "环境变量:" echo " IMAGE_TAG Docker 镜像标签(默认:latest)" echo " DOCKER_BUILD 是否构建镜像(默认:true)" echo " PUSH_IMAGE 是否推送镜像(默认:true)" } # 主函数 main() { COMMAND=$1 case $COMMAND in deploy) check_dependencies build_images push_images create_namespace create_config deploy_services deploy_applications deploy_ingress deploy_hpa check_status print_success "部署完成!" ;; build) check_dependencies build_images print_success "镜像构建完成!" ;; push) push_images print_success "镜像推送完成!" ;; k8s) create_namespace create_config deploy_services deploy_applications deploy_ingress deploy_hpa check_status print_success "K8s 部署完成!" ;; logs) view_logs "$2" ;; scale) scale_service "$2" "$3" ;; restart) restart_service "$2" ;; status) check_status ;; undeploy) undeploy ;; help|--help|-h) show_help ;; *) print_error "未知命令:$COMMAND" show_help exit 1 ;; esac } # 执行主函数 main "$@"