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:
2025-10-17 17:15:55 +08:00
parent 31ccb0b1b8
commit 1a768bc837
36 changed files with 1805 additions and 695 deletions

View File

@@ -200,22 +200,22 @@ parse_version_info() {
VERSION=$(grep '"version"' "$VERSION_FILE_PATH" | sed 's/.*"version": *"\([^"]*\)".*/\1/')
BUILD_TIME=$(grep '"build_time"' "$VERSION_FILE_PATH" | sed 's/.*"build_time": *"\([^"]*\)".*/\1/')
# 解析 artifact_list
grep -A 100 '"artifact_list"' "$VERSION_FILE_PATH" | grep -E '^\s*"[^"]+":\s*"[^"]+"' | while read line; do
# 解析 artifact_list(跳过字段名本身)
grep -A 100 '"artifact_list"' "$VERSION_FILE_PATH" | grep -v '"artifact_list"' | grep -E '^\s*"[^"]+":\s*"[^"]+"' | while read line; do
component=$(echo "$line" | sed 's/.*"\([^"]*\)":\s*"[^"]*".*/\1/')
version=$(echo "$line" | sed 's/.*"[^"]*":\s*"\([^"]*\)".*/\1/')
echo "$component:$version" >> "$TEMP_DIR/components.txt"
done
# 解析 checksums
grep -A 100 '"checksums"' "$VERSION_FILE_PATH" | grep -E '^\s*"[^"]+":\s*"[^"]+"' | while read line; do
# 解析 checksums(跳过字段名本身)
grep -A 100 '"checksums"' "$VERSION_FILE_PATH" | grep -v '"checksums"' | grep -E '^\s*"[^"]+":\s*"[^"]+"' | while read line; do
component=$(echo "$line" | sed 's/.*"\([^"]*\)":\s*"[^"]*".*/\1/')
checksum=$(echo "$line" | sed 's/.*"[^"]*":\s*"\([^"]*\)".*/\1/')
echo "$component:$checksum" >> "$TEMP_DIR/checksums.txt"
done
# 解析 install_order
grep -A 100 '"install_order"' "$VERSION_FILE_PATH" | grep -E '^\s*"[^"]+"' | while read line; do
# 解析 install_order(跳过字段名本身,只取数组元素)
grep -A 100 '"install_order"' "$VERSION_FILE_PATH" | grep -v '"install_order"' | grep -E '^\s*"[^"]+"' | while read line; do
component=$(echo "$line" | sed 's/.*"\([^"]*\)".*/\1/')
echo "$component" >> "$TEMP_DIR/install_order.txt"
done
@@ -317,85 +317,152 @@ create_install_dirs() {
log_success "安装目录创建完成: $INSTALL_DIR"
}
# 获取系统版本
get_system_version() {
if [[ ! -f /etc/os-release ]]; then
log_error "无法检测操作系统版本"
return 1
fi
source /etc/os-release
# 提取主版本号
case "$VERSION_ID" in
"20.04")
echo "ubuntu20"
;;
"22.04")
echo "ubuntu22"
;;
*)
log_warning "未识别的Ubuntu版本: $VERSION_ID,尝试使用ubuntu22"
echo "ubuntu22"
;;
esac
}
# 安装系统依赖包
install_system_deps() {
log_info "检查系统依赖包..."
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
local deps_dir="$script_dir/deps"
# 检查deps目录是否存在
if [[ ! -d "$deps_dir" ]]; then
log_info "deps 目录不存在,跳过系统依赖包安装"
return 0
fi
# 获取系统版本对应的依赖目录
local system_version=$(get_system_version)
local version_deps_dir="$deps_dir/$system_version"
# 检查是否有tar.gz文件
local deps_count=$(find "$deps_dir" -name "*.tar.gz" | wc -l)
if [[ $deps_count -eq 0 ]]; then
log_info "deps 目录中没有 tar.gz 文件,跳过系统依赖包安装"
return 0
log_info "检测到系统版本: $system_version"
# 检查版本特定的依赖目录是否存在
if [[ ! -d "$version_deps_dir" ]]; then
log_warning "未找到 $system_version 版本的依赖目录: $version_deps_dir"
# 回退到旧的逻辑,检查根deps目录
local deps_count=$(find "$deps_dir" -name "*.tar.gz" | wc -l)
if [[ $deps_count -eq 0 ]]; then
log_info "deps 目录中没有 tar.gz 文件,跳过系统依赖包安装"
return 0
fi
version_deps_dir="$deps_dir"
else
# 检查版本目录中是否有tar.gz文件
local deps_count=$(find "$version_deps_dir" -name "*.tar.gz" | wc -l)
if [[ $deps_count -eq 0 ]]; then
log_info "$system_version 版本目录中没有 tar.gz 文件,跳过系统依赖包安装"
return 0
fi
fi
log_info "找到 $deps_count 个系统依赖包,开始安装..."
log_info "找到 $system_version 版本的依赖包,开始安装..."
# 创建临时目录用于解压依赖包
local deps_temp_dir="$TEMP_DIR/deps"
local deps_temp_dir="${TEMP_DIR:-/tmp}/deps"
mkdir -p "$deps_temp_dir"
# 定义要检查的核心依赖
local CORE_DEPS=(jq cron curl)
local FAILED_DEPS=()
# 处理每个tar.gz文件
find "$deps_dir" -name "*.tar.gz" | while read tar_file; do
find "$version_deps_dir" -name "*.tar.gz" | while read tar_file; do
local tar_basename=$(basename "$tar_file")
local extract_name="${tar_basename%.tar.gz}"
log_info "处理依赖包: $tar_basename"
# 解压到临时目录
local extract_dir="$deps_temp_dir/$extract_name"
mkdir -p "$extract_dir"
if tar -xzf "$tar_file" -C "$extract_dir" 2>/dev/null; then
log_success " $tar_basename 解压完成"
else
log_error " $tar_basename 解压失败"
continue
fi
# 进入解压目录,查找deb包
cd "$extract_dir"
local deb_count=$(find . -name "*.deb" | wc -l)
if [[ $deb_count -gt 0 ]]; then
log_info " 找到 $deb_count 个 deb 包,开始安装..."
# 1. 先尝试安装所有deb包
log_info " 第1步:批量安装deb包..."
if dpkg -i *.deb 2>/dev/null; then
log_success " 所有deb包安装成功"
else
log_warning " 部分deb包安装失败,可能存在依赖问题"
# 2. 使用apt-get修复依赖
log_info " 第2步:修复依赖关系..."
if apt-get install -f -y; then
log_success " 依赖关系修复完成"
else
log_error " 依赖关系修复失败"
# 继续处理其他包,不退出
cd "$extract_dir" || continue
local deb_files=(*.deb)
if [[ ${#deb_files[@]} -gt 0 ]]; then
log_info " 找到 ${#deb_files[@]} 个 deb 包,开始安装..."
for deb in "${deb_files[@]}"; do
local pkg_name
pkg_name=$(dpkg-deb -f "$deb" Package 2>/dev/null)
# 如果已安装,则跳过
if dpkg -s "$pkg_name" &>/dev/null; then
log_success " $pkg_name 已安装,跳过"
continue
fi
fi
# 尝试安装
log_info " 安装 $pkg_name..."
if DEBIAN_FRONTEND=noninteractive dpkg -i "$deb" &>/dev/null; then
log_success " $pkg_name 安装成功"
else
log_warning " $pkg_name 安装失败,尝试修复依赖..."
if DEBIAN_FRONTEND=noninteractive apt-get install -f -y &>/dev/null; then
if dpkg -s "$pkg_name" &>/dev/null; then
log_success " $pkg_name 修复安装成功"
else
log_error " $pkg_name 仍未安装成功"
FAILED_DEPS+=("$pkg_name")
fi
else
log_error " $pkg_name 自动修复失败"
FAILED_DEPS+=("$pkg_name")
fi
fi
done
else
log_info " $tar_basename 中没有找到deb包,跳过"
fi
# 返回到依赖临时目录
cd "$deps_temp_dir"
cd "$deps_temp_dir" || continue
done
# 检查并启动 cron 服务
start_cron_service
log_success "系统依赖包安装完成"
# 总结安装结果
if [[ ${#FAILED_DEPS[@]} -gt 0 ]]; then
log_error "以下系统依赖未能成功安装,安装终止,请手动安装后重试:"
for f in "${FAILED_DEPS[@]}"; do
echo " - $f"
done
exit 1
else
log_success "系统依赖包安装完成,全部就绪"
fi
}
# 启动 cron 服务
@@ -637,6 +704,18 @@ EOF
log_success "安装记录已创建: $install_record_file"
}
# 检查cron任务是否已存在
check_cron_task_exists() {
local task_pattern="$1"
local temp_cron="$2"
if grep -q "$task_pattern" "$temp_cron"; then
return 0 # 任务已存在
else
return 1 # 任务不存在
fi
}
# 设置健康检查定时任务
setup_health_check_cron() {
log_info "设置健康检查定时任务..."
@@ -661,7 +740,7 @@ setup_health_check_cron() {
crontab -l 2>/dev/null > "$temp_cron" || touch "$temp_cron"
# 检查并删除旧的健康检查任务
if grep -q "check_health.sh" "$temp_cron"; then
if check_cron_task_exists "check_health.sh" "$temp_cron"; then
log_info "发现旧的健康检查定时任务,正在更新..."
# 删除所有包含check_health.sh的行
grep -v "check_health.sh" "$temp_cron" > "$temp_cron.new"
@@ -716,7 +795,7 @@ setup_dns_sync_cron() {
crontab -l 2>/dev/null > "$temp_cron" || touch "$temp_cron"
# 检查并删除旧的 DNS 同步任务
if grep -q "sync_dns.sh" "$temp_cron"; then
if check_cron_task_exists "sync_dns.sh" "$temp_cron"; then
log_info "发现旧的 DNS 同步定时任务,正在更新..."
# 删除所有包含sync_dns.sh的行
grep -v "sync_dns.sh" "$temp_cron" > "$temp_cron.new"
@@ -724,16 +803,15 @@ setup_dns_sync_cron() {
log_info "旧的 DNS 同步定时任务已删除"
fi
# 添加新的定时任务(每30秒执行一次)
# 添加新的定时任务(每1分钟执行一次)
# 直接使用版本目录中的 DNS 同步脚本
echo "# Argus-Metrics DNS 同步定时任务" >> "$temp_cron"
echo "* * * * * $sync_dns_script >> $INSTALL_DIR/.dns_sync.log 2>&1" >> "$temp_cron"
echo "* * * * * sleep 30; $sync_dns_script >> $INSTALL_DIR/.dns_sync.log 2>&1" >> "$temp_cron"
# 安装新的crontab
if crontab "$temp_cron"; then
log_success "DNS 同步定时任务设置成功"
log_info " 执行频率: 每30秒"
log_info " 执行频率: 每1分钟"
log_info " 日志文件: $INSTALL_DIR/.dns_sync.log"
log_info " 查看定时任务: crontab -l"
log_info " 删除定时任务: crontab -e"
@@ -771,7 +849,7 @@ setup_version_check_cron() {
crontab -l > "$temp_cron" 2>/dev/null || touch "$temp_cron"
# 检查是否已存在版本校验定时任务
if grep -q "check_version.sh" "$temp_cron"; then
if check_cron_task_exists "check_version.sh" "$temp_cron"; then
log_info "发现旧的版本校验定时任务,正在更新..."
# 删除所有包含check_version.sh的行
grep -v "check_version.sh" "$temp_cron" > "$temp_cron.new"
@@ -824,7 +902,7 @@ setup_restart_cron() {
crontab -l > "$temp_cron" 2>/dev/null || touch "$temp_cron"
# 检查是否已存在自动重启定时任务
if grep -q "restart_unhealthy.sh" "$temp_cron"; then
if check_cron_task_exists "restart_unhealthy.sh" "$temp_cron"; then
log_info "发现旧的自动重启定时任务,正在更新..."
# 删除所有包含restart_unhealthy.sh的行
grep -v "restart_unhealthy.sh" "$temp_cron" > "$temp_cron.new"
@@ -885,9 +963,9 @@ main() {
check_system
find_version_file
create_install_dirs
parse_version_info
install_system_deps
parse_version_info
verify_checksums
install_system_deps
install_components
copy_config_files
create_install_record
@@ -895,6 +973,20 @@ main() {
setup_dns_sync_cron
setup_version_check_cron
setup_restart_cron
# 注释掉立即执行健康检查,避免与cron任务重复执行
# log_info "立即执行一次健康检查..."
# local check_health_script="$INSTALL_DIR/check_health.sh"
# if [[ -f "$check_health_script" ]]; then
# if "$check_health_script" >> "$INSTALL_DIR/.health_check.log" 2>&1; then
# log_success "健康检查执行完成"
# else
# log_warning "健康检查执行失败,请检查日志: $INSTALL_DIR/.health_check.log"
# fi
# else
# log_warning "健康检查脚本不存在: $check_health_script"
# fi
show_install_info
}