erp-java/services/report-service/deploy/deploy.sh

127 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
# Report Service 部署脚本
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 配置
SERVICE_NAME="report-service"
SERVICE_PORT=8084
DOCKER_IMAGE="erp-registry.cn-hangzhou.cr.aliyuncs.com/erp/report-service:1.0.0"
NAMESPACE="erp"
echo -e "${GREEN}======================================"
echo -e " Report Service 部署脚本"
echo -e "======================================${NC}"
# 构建项目
build_project() {
echo -e "${YELLOW}[1/5] 构建项目...${NC}"
cd "$(dirname "$0")/.."
mvn clean package -DskipTests -U
echo -e "${GREEN}构建完成${NC}"
}
# 构建Docker镜像
build_docker() {
echo -e "${YELLOW}[2/5] 构建Docker镜像...${NC}"
cd "$(dirname "$0")/.."
docker build -t "$DOCKER_IMAGE" -f deploy/Dockerfile .
echo -e "${GREEN}Docker镜像构建完成${NC}"
}
# 推送Docker镜像
push_docker() {
echo -e "${YELLOW}[3/5] 推送Docker镜像...${NC}"
docker push "$DOCKER_IMAGE"
echo -e "${GREEN}Docker镜像推送完成${NC}"
}
# 部署到K8s
deploy_k8s() {
echo -e "${YELLOW}[4/5] 部署到Kubernetes...${NC}"
kubectl apply -f deploy/k8s-deployment.yaml -n "$NAMESPACE"
echo -e "${GREEN}K8s部署完成${NC}"
}
# 等待服务就绪
wait_for_service() {
echo -e "${YELLOW}[5/5] 等待服务就绪...${NC}"
kubectl rollout status deployment/report-service -n "$NAMESPACE" --timeout=300s
# 检查健康状态
for i in {1..30}; do
HEALTH=$(kubectl get pods -n "$NAMESPACE" -l app=report-service -o jsonpath='{.items[0].status.phase}')
if [ "$HEALTH" == "Running" ]; then
echo -e "${GREEN}服务已就绪${NC}"
return 0
fi
sleep 2
done
echo -e "${RED}服务启动超时${NC}"
return 1
}
# 显示服务状态
show_status() {
echo -e "${GREEN}======================================"
echo -e " 服务状态"
echo -e "======================================${NC}"
kubectl get pods -n "$NAMESPACE" -l app=report-service
echo ""
kubectl get svc -n "$NAMESPACE" -l app=report-service
}
# 主流程
main() {
case "${1:-deploy}" in
build)
build_project
;;
docker)
build_project
build_docker
;;
push)
build_project
build_docker
push_docker
;;
deploy)
build_project
build_docker
push_docker
deploy_k8s
wait_for_service
show_status
;;
status)
show_status
;;
restart)
kubectl rollout restart deployment/report-service -n "$NAMESPACE"
wait_for_service
show_status
;;
scale)
kubectl scale deployment/report-service --replicas="${2:-2}" -n "$NAMESPACE"
;;
logs)
kubectl logs -f deployment/report-service -n "$NAMESPACE" "${@:2}"
;;
*)
echo "用法: $0 {build|docker|push|deploy|status|restart|scale|logs}"
exit 1
;;
esac
}
main "$@"