Cpte-Boot/deploy.sh

395 lines
10 KiB
Bash
Raw Normal View History

2026-03-06 15:19:25 +08:00
#!/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 <service-name>"
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 <service-name> <replicas>"
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 <service-name>"
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 <command>"
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 "$@"