dev_1.0.0_sundp_2 优化Argus-metric模块的e2e部署测试流程 (#27)
Co-authored-by: sundapeng.sdp <sundapeng@hashdata.cn> Reviewed-on: #27 Reviewed-by: yuyr <yuyr@zgclab.edu.cn> Reviewed-by: xuxt <xuxt@zgclab.edu.cn>
This commit was merged in pull request #27.
This commit is contained in:
203
src/metric/tests/scripts/common/start-all.sh
Executable file
203
src/metric/tests/scripts/common/start-all.sh
Executable file
@@ -0,0 +1,203 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 一键启动脚本
|
||||
# 用于初始化目录、构建镜像并启动所有服务
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
TEST_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
cd "$TEST_DIR"
|
||||
|
||||
# 解析参数
|
||||
FORCE_REBUILD=false
|
||||
if [[ "$1" == "--rebuild" ]]; then
|
||||
FORCE_REBUILD=true
|
||||
fi
|
||||
|
||||
echo "=========================================="
|
||||
echo " Argus Metrics 一键启动脚本"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "当前工作目录: $TEST_DIR"
|
||||
echo ""
|
||||
|
||||
# 检查 Docker 和 Docker Compose
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo "错误: 未找到 docker 命令,请先安装 Docker"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查 docker compose 命令
|
||||
if ! docker compose version &> /dev/null 2>&1; then
|
||||
echo "错误: 未找到 docker compose 命令,请确保 Docker Compose V2 已安装"
|
||||
exit 1
|
||||
fi
|
||||
echo "使用: docker compose"
|
||||
echo "Compose 文件: $TEST_DIR/docker-compose.yml"
|
||||
echo ""
|
||||
|
||||
# 检查必要的构建目录
|
||||
echo "检查构建目录..."
|
||||
BUILD_DIRS=(
|
||||
"../ftp/build"
|
||||
"../prometheus/build"
|
||||
"../grafana/build"
|
||||
"client-test-node/build"
|
||||
"client-test-gpu-node/build"
|
||||
)
|
||||
|
||||
for dir in "${BUILD_DIRS[@]}"; do
|
||||
if [ ! -d "$dir" ]; then
|
||||
echo "错误: 构建目录不存在: $dir"
|
||||
echo "完整路径: $(cd "$(dirname "$dir")" 2>/dev/null && pwd)/$(basename "$dir")"
|
||||
exit 1
|
||||
else
|
||||
echo " ✓ 找到: $dir"
|
||||
fi
|
||||
done
|
||||
echo ""
|
||||
|
||||
# 检查并创建 .env 文件
|
||||
if [ ! -f .env ]; then
|
||||
echo "未找到 .env 文件,从 env.example 创建..."
|
||||
cp env.example .env
|
||||
echo "已创建 .env 文件,请根据需要修改配置"
|
||||
fi
|
||||
|
||||
# 加载环境变量
|
||||
source .env
|
||||
|
||||
# 检查并创建 Docker 网络
|
||||
echo "检查 Docker 网络..."
|
||||
NETWORK_NAME="argus-debug-net"
|
||||
if docker network inspect "$NETWORK_NAME" >/dev/null 2>&1; then
|
||||
echo "网络 $NETWORK_NAME 已存在"
|
||||
else
|
||||
echo "创建网络 $NETWORK_NAME..."
|
||||
docker network create --driver bridge --subnet 172.30.0.0/16 "$NETWORK_NAME"
|
||||
echo "网络创建成功"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
echo "1. 初始化目录结构..."
|
||||
bash "$SCRIPT_DIR/init-directories.sh"
|
||||
|
||||
echo ""
|
||||
echo "2. 准备 Docker 镜像..."
|
||||
|
||||
# 检查镜像是否存在
|
||||
IMAGE_CACHE_DIR="$TEST_DIR/images-cache"
|
||||
IMAGES=("argus-metric-ftp:latest" "argus-metric-prometheus:latest" "argus-metric-grafana:latest" "argus-metric-test-node:latest" "argus-metric-test-gpu-node:latest")
|
||||
all_images_exist=true
|
||||
|
||||
for image in "${IMAGES[@]}"; do
|
||||
if ! docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^${image}$"; then
|
||||
all_images_exist=false
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if $FORCE_REBUILD; then
|
||||
echo "强制重新构建镜像(--rebuild 模式)..."
|
||||
cd "$TEST_DIR"
|
||||
docker compose build --no-cache
|
||||
echo "镜像重新构建完成"
|
||||
elif $all_images_exist; then
|
||||
echo "所有镜像已存在,跳过构建"
|
||||
else
|
||||
echo "检测到缺失镜像,尝试从缓存加载..."
|
||||
|
||||
# 尝试从缓存加载
|
||||
loaded_from_cache=false
|
||||
if [ -d "$IMAGE_CACHE_DIR" ]; then
|
||||
for image in "${IMAGES[@]}"; do
|
||||
if ! docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^${image}$"; then
|
||||
# 镜像不存在,尝试加载
|
||||
case "$image" in
|
||||
"argus-metric-ftp:latest")
|
||||
cache_file="${IMAGE_CACHE_DIR}/argus-ftp.tar"
|
||||
;;
|
||||
"argus-metric-prometheus:latest")
|
||||
cache_file="${IMAGE_CACHE_DIR}/argus-prometheus.tar"
|
||||
;;
|
||||
"argus-metric-grafana:latest")
|
||||
cache_file="${IMAGE_CACHE_DIR}/argus-grafana.tar"
|
||||
;;
|
||||
"argus-metric-test-node:latest")
|
||||
cache_file="${IMAGE_CACHE_DIR}/argus-test-node.tar"
|
||||
;;
|
||||
"argus-metric-test-gpu-node:latest")
|
||||
cache_file="${IMAGE_CACHE_DIR}/argus-test-gpu-node.tar"
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -f "$cache_file" ]; then
|
||||
echo " 从缓存加载: $image"
|
||||
docker load -i "$cache_file"
|
||||
loaded_from_cache=true
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# 检查加载后是否还有缺失的镜像
|
||||
need_build=false
|
||||
for image in "${IMAGES[@]}"; do
|
||||
if ! docker images --format "{{.Repository}}:{{.Tag}}" | grep -q "^${image}$"; then
|
||||
need_build=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if $need_build; then
|
||||
echo ""
|
||||
echo "部分镜像缺失,开始构建..."
|
||||
echo "工作目录: $(pwd)"
|
||||
cd "$TEST_DIR"
|
||||
docker compose build --no-cache
|
||||
|
||||
# 询问是否保存镜像
|
||||
echo ""
|
||||
read -p "是否保存镜像到缓存以便下次快速启动? (Y/n): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Nn]$ ]]; then
|
||||
mkdir -p "$IMAGE_CACHE_DIR"
|
||||
echo "保存镜像到缓存..."
|
||||
for image in "${IMAGES[@]}"; do
|
||||
case "$image" in
|
||||
"argus-metric-ftp:latest")
|
||||
docker save -o "${IMAGE_CACHE_DIR}/argus-ftp.tar" "$image" && echo " 已保存: argus-ftp.tar"
|
||||
;;
|
||||
"argus-metric-prometheus:latest")
|
||||
docker save -o "${IMAGE_CACHE_DIR}/argus-prometheus.tar" "$image" && echo " 已保存: argus-prometheus.tar"
|
||||
;;
|
||||
"argus-metric-grafana:latest")
|
||||
docker save -o "${IMAGE_CACHE_DIR}/argus-grafana.tar" "$image" && echo " 已保存: argus-grafana.tar"
|
||||
;;
|
||||
"argus-metric-test-node:latest")
|
||||
docker save -o "${IMAGE_CACHE_DIR}/argus-test-node.tar" "$image" && echo " 已保存: argus-test-node.tar"
|
||||
;;
|
||||
"argus-metric-test-gpu-node:latest")
|
||||
docker save -o "${IMAGE_CACHE_DIR}/argus-test-gpu-node.tar" "$image" && echo " 已保存: argus-test-gpu-node.tar"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
echo "镜像已保存到: $IMAGE_CACHE_DIR/"
|
||||
fi
|
||||
elif $loaded_from_cache; then
|
||||
echo ""
|
||||
echo "所有镜像已从缓存加载完成!"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "3. 启动基础服务..."
|
||||
cd "$TEST_DIR"
|
||||
# 启动除GPU节点外的所有服务
|
||||
docker compose up -d ftp prometheus grafana test-node test-gpu-node
|
||||
|
||||
echo ""
|
||||
echo "4. 等待服务启动..."
|
||||
sleep 5
|
||||
|
||||
Reference in New Issue
Block a user