202 lines
4.3 KiB
Bash
Executable File
202 lines
4.3 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# ============================================
|
||
# 发票服务部署脚本
|
||
# ============================================
|
||
|
||
set -e
|
||
|
||
# 配置
|
||
SERVICE_NAME="invoice-service"
|
||
SERVICE_PORT=8086
|
||
IMAGE_NAME="erp/invoice-service"
|
||
IMAGE_TAG="${1:-latest}"
|
||
NAMESPACE="erp"
|
||
|
||
# 颜色输出
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m' # No Color
|
||
|
||
log_info() {
|
||
echo -e "${GREEN}[INFO]${NC} $1"
|
||
}
|
||
|
||
log_warn() {
|
||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||
}
|
||
|
||
log_error() {
|
||
echo -e "${RED}[ERROR]${NC} $1"
|
||
}
|
||
|
||
# 检查Docker
|
||
check_docker() {
|
||
if ! command -v docker &> /dev/null; then
|
||
log_error "Docker未安装,请先安装Docker"
|
||
exit 1
|
||
fi
|
||
log_info "Docker已安装"
|
||
}
|
||
|
||
# 构建镜像
|
||
build_image() {
|
||
log_info "开始构建Docker镜像: ${IMAGE_NAME}:${IMAGE_TAG}"
|
||
|
||
cd "$(dirname "$0")/.."
|
||
|
||
docker build -t ${IMAGE_NAME}:${IMAGE_TAG} .
|
||
docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:latest
|
||
|
||
log_info "镜像构建完成"
|
||
}
|
||
|
||
# 推送镜像
|
||
push_image() {
|
||
log_info "推送镜像到仓库"
|
||
|
||
# 如果使用私有仓库,需要先登录
|
||
# docker login registry.example.com
|
||
|
||
docker push ${IMAGE_NAME}:${IMAGE_TAG}
|
||
docker push ${IMAGE_NAME}:latest
|
||
|
||
log_info "镜像推送完成"
|
||
}
|
||
|
||
# Docker Compose部署
|
||
deploy_docker_compose() {
|
||
log_info "使用Docker Compose部署服务"
|
||
|
||
cd "$(dirname "$0")/.."
|
||
|
||
docker-compose down || true
|
||
docker-compose up -d
|
||
|
||
log_info "服务部署完成,端口: ${SERVICE_PORT}"
|
||
}
|
||
|
||
# Kubernetes部署
|
||
deploy_kubernetes() {
|
||
log_info "使用Kubernetes部署服务"
|
||
|
||
kubectl apply -f deploy/k8s/deployment.yaml -n ${NAMESPACE}
|
||
|
||
log_info "Kubernetes部署完成"
|
||
}
|
||
|
||
# 等待服务启动
|
||
wait_for_service() {
|
||
log_info "等待服务启动..."
|
||
|
||
max_attempts=30
|
||
attempt=0
|
||
|
||
while [ $attempt -lt $max_attempts ]; do
|
||
if curl -sf http://localhost:${SERVICE_PORT}/actuator/health > /dev/null 2>&1; then
|
||
log_info "服务已就绪"
|
||
return 0
|
||
fi
|
||
|
||
attempt=$((attempt + 1))
|
||
log_info "等待服务启动... ($attempt/$max_attempts)"
|
||
sleep 2
|
||
done
|
||
|
||
log_error "服务启动超时"
|
||
return 1
|
||
}
|
||
|
||
# 执行数据库迁移
|
||
run_migrations() {
|
||
log_info "执行数据库迁移..."
|
||
|
||
# 执行SQL迁移脚本
|
||
mysql -h 111.229.80.149 -u root -pnihao588+ erp_db < src/main/resources/db/migration/V1__create_invoices_table.sql
|
||
|
||
log_info "数据库迁移完成"
|
||
}
|
||
|
||
# 查看日志
|
||
view_logs() {
|
||
docker-compose logs -f ${SERVICE_NAME}
|
||
}
|
||
|
||
# 回滚
|
||
rollback() {
|
||
log_warn "开始回滚服务..."
|
||
|
||
docker pull ${IMAGE_NAME}:previous
|
||
docker-compose down
|
||
docker-compose up -d
|
||
|
||
log_info "回滚完成"
|
||
}
|
||
|
||
# 显示帮助
|
||
show_help() {
|
||
echo "用法: $0 [命令] [标签]"
|
||
|
||
echo ""
|
||
echo "命令:"
|
||
echo " build 构建Docker镜像"
|
||
echo " push 推送镜像到仓库"
|
||
echo " deploy 部署服务 (Docker Compose)"
|
||
echo " deploy-k8s 部署服务 (Kubernetes)"
|
||
echo " migrate 执行数据库迁移"
|
||
echo " logs 查看服务日志"
|
||
echo " rollback 回滚到上一版本"
|
||
echo " help 显示帮助"
|
||
|
||
echo ""
|
||
echo "示例:"
|
||
echo " $0 build v1.0.0 # 构建v1.0.0版本镜像"
|
||
echo " $0 deploy v1.0.0 # 部署v1.0.0版本"
|
||
echo " $0 deploy-k8s # 使用Kubernetes部署"
|
||
}
|
||
|
||
# 主函数
|
||
main() {
|
||
COMMAND="${1:-help}"
|
||
shift || true
|
||
|
||
case ${COMMAND} in
|
||
build)
|
||
check_docker
|
||
build_image
|
||
;;
|
||
push)
|
||
check_docker
|
||
push_image
|
||
;;
|
||
deploy)
|
||
check_docker
|
||
deploy_docker_compose
|
||
wait_for_service
|
||
;;
|
||
deploy-k8s)
|
||
deploy_kubernetes
|
||
;;
|
||
migrate)
|
||
run_migrations
|
||
;;
|
||
logs)
|
||
view_logs
|
||
;;
|
||
rollback)
|
||
rollback
|
||
;;
|
||
help|--help|-h)
|
||
show_help
|
||
;;
|
||
*)
|
||
log_error "未知命令: ${COMMAND}"
|
||
show_help
|
||
exit 1
|
||
;;
|
||
esac
|
||
}
|
||
|
||
main "$@"
|