Cpte-Boot/deploy.sh

395 lines
10 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/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 "$@"