dev_1.0.0_yuyr_2:重新提交 PR,增加 master/agent 以及系统集成测试 #17

Merged
yuyr merged 26 commits from dev_1.0.0_yuyr_2 into dev_1.0.0 2025-10-11 15:04:47 +08:00
2 changed files with 106 additions and 68 deletions
Showing only changes of commit c6437c6404 - Show all commits

View File

@ -1,138 +1,175 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -euo pipefail
# 帮助信息
show_help() { show_help() {
cat << EOF cat <<'EOF'
ARGUS Unified Build System - Image Build Tool ARGUS Unified Build System - Image Build Tool
Usage: $0 [OPTIONS] Usage: $0 [OPTIONS]
Options: Options:
--intranet Use intranet mirror for Ubuntu 22.04 packages --intranet Use intranet mirror for log/bind builds
-h, --help Show this help message --master-offline Build master offline image (requires src/master/offline_wheels.tar.gz)
-h, --help Show this help message
Examples: Examples:
$0 # Build with default sources $0 # Build with default sources
$0 --intranet # Build with intranet mirror $0 --intranet # Build with intranet mirror
$0 --master-offline # Additionally build argus-master:offline
$0 --intranet --master-offline
EOF EOF
} }
# 解析命令行参数
use_intranet=false use_intranet=false
build_master_offline=false
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case $1 in case $1 in
--intranet) --intranet)
use_intranet=true use_intranet=true
shift shift
;; ;;
-h|--help) --master-offline)
show_help build_master_offline=true
exit 0 shift
;; ;;
*) -h|--help)
echo "Unknown option: $1" show_help
show_help exit 0
exit 1 ;;
;; *)
esac echo "Unknown option: $1" >&2
show_help
exit 1
;;
esac
done done
# 获取项目根目录
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$root" cd "$root"
master_root="$root/src/master"
master_offline_tar="$master_root/offline_wheels.tar.gz"
master_offline_dir="$master_root/offline_wheels"
if [[ "$build_master_offline" == true ]]; then
if [[ ! -f "$master_offline_tar" ]]; then
echo "❌ offline wheels tar not found: $master_offline_tar" >&2
echo " 请提前准备好 offline_wheels.tar.gz 后再执行 --master-offline" >&2
exit 1
fi
echo "📦 Preparing offline wheels for master (extracting $master_offline_tar)"
rm -rf "$master_offline_dir"
mkdir -p "$master_offline_dir"
tar -xzf "$master_offline_tar" -C "$master_root"
has_wheel=$(find "$master_offline_dir" -maxdepth 1 -type f -name '*.whl' -print -quit)
if [[ -z "$has_wheel" ]]; then
echo "❌ offline_wheels extraction failed或无 wheel: $master_offline_dir" >&2
exit 1
fi
fi
echo "=======================================" echo "======================================="
echo "ARGUS Unified Build System" echo "ARGUS Unified Build System"
echo "=======================================" echo "======================================="
if [[ "$use_intranet" == true ]]; then if [[ "$use_intranet" == true ]]; then
echo "🌐 Mode: Intranet (Using internal mirror: 10.68.64.1)" echo "🌐 Mode: Intranet (Using internal mirror: 10.68.64.1)"
build_args="--build-arg USE_INTRANET=true" build_args="--build-arg USE_INTRANET=true"
else else
echo "🌐 Mode: Public (Using default package sources)" echo "🌐 Mode: Public (Using default package sources)"
build_args="" build_args=""
fi fi
echo "📁 Build context: $root" echo "📁 Build context: $root"
echo "" echo ""
# 构建镜像的函数
build_image() { build_image() {
local image_name=$1 local image_name=$1
local dockerfile_path=$2 local dockerfile_path=$2
local tag=$3 local tag=$3
local extra_args=$4
echo "🔄 Building $image_name image..." echo "🔄 Building $image_name image..."
echo " Dockerfile: $dockerfile_path" echo " Dockerfile: $dockerfile_path"
echo " Tag: $tag" echo " Tag: $tag"
if docker build $build_args -f "$dockerfile_path" -t "$tag" .; then if docker build $build_args $extra_args -f "$dockerfile_path" -t "$tag" .; then
echo "$image_name image built successfully" echo "$image_name image built successfully"
return 0 return 0
else else
echo "❌ Failed to build $image_name image" echo "❌ Failed to build $image_name image"
return 1 return 1
fi fi
} }
# 构建所有镜像
images_built=() images_built=()
build_failed=false build_failed=false
# 构建 Elasticsearch 镜像 if build_image "Elasticsearch" "src/log/elasticsearch/build/Dockerfile" "argus-elasticsearch:latest" ""; then
if build_image "Elasticsearch" "src/log/elasticsearch/build/Dockerfile" "argus-elasticsearch:latest"; then images_built+=("argus-elasticsearch:latest")
images_built+=("argus-elasticsearch:latest")
else else
build_failed=true build_failed=true
fi fi
echo "" echo ""
# 构建 Kibana 镜像 if build_image "Kibana" "src/log/kibana/build/Dockerfile" "argus-kibana:latest" ""; then
if build_image "Kibana" "src/log/kibana/build/Dockerfile" "argus-kibana:latest"; then images_built+=("argus-kibana:latest")
images_built+=("argus-kibana:latest")
else else
build_failed=true build_failed=true
fi fi
echo "" echo ""
# 构建 BIND9 镜像 if build_image "BIND9" "src/bind/build/Dockerfile" "argus-bind9:latest" ""; then
if build_image "BIND9" "src/bind/build/Dockerfile" "argus-bind9:latest"; then images_built+=("argus-bind9:latest")
images_built+=("argus-bind9:latest")
else else
build_failed=true build_failed=true
fi fi
echo "" echo ""
if [[ "$build_master_offline" == true ]]; then
echo "🏗️ Building master offline image"
pushd "$master_root" >/dev/null
if ./scripts/build_images.sh --offline --tag argus-master:offline; then
images_built+=("argus-master:offline")
else
build_failed=true
fi
popd >/dev/null
fi
echo "=======================================" echo "======================================="
echo "📦 Build Summary" echo "📦 Build Summary"
echo "=======================================" echo "======================================="
if [[ ${#images_built[@]} -gt 0 ]]; then if [[ ${#images_built[@]} -gt 0 ]]; then
echo "✅ Successfully built images:" echo "✅ Successfully built images:"
for image in "${images_built[@]}"; do for image in "${images_built[@]}"; do
echo "$image" echo "$image"
done done
fi fi
if [[ "$build_failed" == true ]]; then if [[ "$build_failed" == true ]]; then
echo "" echo ""
echo "❌ Some images failed to build. Please check the errors above." echo "❌ Some images failed to build. Please check the errors above."
exit 1 exit 1
fi fi
if [[ "$use_intranet" == true ]]; then if [[ "$use_intranet" == true ]]; then
echo "" echo ""
echo "🌐 Built with intranet mirror configuration" echo "🌐 Built with intranet mirror configuration"
fi
if [[ "$build_master_offline" == true ]]; then
echo ""
echo "🧳 Master offline wheels 已解压到 $master_offline_dir"
fi fi
echo "" echo ""
echo "🚀 Next steps:" echo "🚀 Next steps:"
echo " cd src/log && ./scripts/save_images.sh # Export log images" echo " ./build/save_images.sh --compress # 导出镜像"
echo " cd src/bind && ./scripts/save_images.sh # Export bind images" echo " cd src/master/tests && MASTER_IMAGE_TAG=argus-master:offline ./scripts/00_e2e_test.sh"
echo " cd src/log/tests && ./scripts/02_up.sh # Start log services"
echo "" echo ""

View File

@ -67,6 +67,7 @@ declare -A images=(
["argus-elasticsearch:latest"]="argus-elasticsearch-latest.tar" ["argus-elasticsearch:latest"]="argus-elasticsearch-latest.tar"
["argus-kibana:latest"]="argus-kibana-latest.tar" ["argus-kibana:latest"]="argus-kibana-latest.tar"
["argus-bind9:latest"]="argus-bind9-latest.tar" ["argus-bind9:latest"]="argus-bind9-latest.tar"
["argus-master:offline"]="argus-master-offline.tar"
) )
# 函数:检查镜像是否存在 # 函数:检查镜像是否存在