a-cloud-all/k8s/09-job/deploy.sh

165 lines
4.2 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
set -e
# 保存脚本所在目录的绝对路径
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DOCKER_DIR="$SCRIPT_DIR/../../docker"
echo "=========================================="
echo "部署 Job"
echo "=========================================="
# 检查是否需要清理旧部署
echo ""
echo "检查现有 Job 部署..."
if kubectl get deployment job -n ruoyi &> /dev/null; then
echo "⚠️ 检测到已存在的 Job 部署,自动清理..."
echo "删除旧的 Job Deployment..."
kubectl delete deployment job -n ruoyi --ignore-not-found=true
echo "删除旧的 Job Service..."
kubectl delete service ruoyi-modules-job -n ruoyi --ignore-not-found=true
echo "等待资源清理完成..."
sleep 5
echo "✓ 旧部署清理完成"
fi
echo ""
# 步骤 1: 打包 Job
echo "步骤 1: 打包 Job jar..."
cd "$SCRIPT_DIR/../../bin"
sh package.sh ruoyi-modules-job
if [ $? -eq 0 ]; then
echo "✓ Job 打包完成"
else
echo "✗ Job 打包失败"
exit 1
fi
# 步骤 2: 复制 jar 文件
echo ""
echo "步骤 2: 复制 Job jar 文件..."
cp "$SCRIPT_DIR/../../ruoyi-modules/ruoyi-job/target/ruoyi-modules-job.jar" "$DOCKER_DIR/ruoyi/modules/job/jar/"
echo "✓ jar 文件复制完成"
# 步骤 3: 构建 Job 镜像
echo ""
echo "步骤 3: 构建 Job 镜像..."
cd "$DOCKER_DIR"
docker-compose build --no-cache ruoyi-modules-job
if [ $? -eq 0 ]; then
echo "✓ Job 镜像构建完成"
else
echo "✗ Job 镜像构建失败"
exit 1
fi
# 步骤 3.5: 检测环境并导入镜像(仅 Minikube 需要)
echo ""
if command -v minikube &> /dev/null && minikube status &> /dev/null; then
echo "检测到 Minikube 环境,导入镜像(可能需要 1-2 分钟)..."
# 先导出镜像到临时文件
TEMP_IMAGE="/tmp/ruoyi-modules-job-runtime-$$.tar"
echo "导出镜像到临时文件..."
docker save -o "$TEMP_IMAGE" ruoyi-modules-job-runtime
# 导入到 Minikube
echo "导入镜像到 Minikube..."
minikube image load "$TEMP_IMAGE" &
PID=$!
# 显示进度,最多等待 5 分钟
COUNT=0
MAX_COUNT=150
while kill -0 $PID 2>/dev/null; do
echo -n "."
sleep 2
COUNT=$((COUNT + 1))
if [ $COUNT -ge $MAX_COUNT ]; then
kill $PID 2>/dev/null
echo ""
echo "✗ 镜像导入超时(超过 5 分钟)"
rm -f "$TEMP_IMAGE"
exit 1
fi
done
wait $PID
EXIT_CODE=$?
echo ""
if [ $EXIT_CODE -eq 0 ]; then
echo "✓ 镜像导入到 Minikube 完成"
else
echo "✗ 镜像导入失败"
rm -f "$TEMP_IMAGE"
exit 1
fi
# 清理临时文件
rm -f "$TEMP_IMAGE"
else
echo "检测到 k3s/k8s 环境,跳过镜像导入(使用本地 Docker 镜像)"
fi
# 步骤 4: 部署到 K8s
echo ""
echo "步骤 4: 部署到 Kubernetes..."
cd "$SCRIPT_DIR"
kubectl apply -f service.yaml
kubectl apply -f deployment.yaml
# 步骤 5: 等待 Pod 启动
echo ""
echo "步骤 5: 等待 Job Pod 启动..."
kubectl wait --for=condition=ready pod -l app=job -n ruoyi --timeout=300s
if [ $? -ne 0 ]; then
echo "✗ Job Pod 启动超时"
exit 1
fi
# 检查部署状态
echo ""
echo "=========================================="
echo "检查部署结果"
echo "=========================================="
# 检查 Pod 状态
echo "检查 Job Pod 状态..."
POD_STATUS=$(kubectl get pods -n ruoyi -l app=job -o jsonpath='{.items[0].status.phase}')
if [ "$POD_STATUS" == "Running" ]; then
echo "✓ Job Pod 运行正常"
kubectl get pods -n ruoyi -l app=job
else
echo "✗ Job Pod 状态异常: $POD_STATUS"
kubectl get pods -n ruoyi -l app=job
exit 1
fi
echo ""
# 检查 Service 状态
echo "检查 Job Service 状态..."
if kubectl get svc ruoyi-modules-job -n ruoyi &> /dev/null; then
echo "✓ Job Service 创建成功"
kubectl get svc -n ruoyi ruoyi-modules-job
else
echo "✗ Job Service 创建失败"
exit 1
fi
echo ""
echo "=========================================="
echo "✓ Job 部署完成!"
echo "=========================================="
echo ""
echo "访问信息:"
echo " Service: ruoyi-modules-job.ruoyi.svc.cluster.local"
echo " 端口: 9203"
echo ""
exit 0