395 lines
10 KiB
Bash
395 lines
10 KiB
Bash
#!/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 "$@"
|