From c6437c64044c289d191864742c087f51ad69d823 Mon Sep 17 00:00:00 2001 From: yuyr Date: Wed, 24 Sep 2025 09:46:46 +0000 Subject: [PATCH] =?UTF-8?q?[#2]=20=E6=8A=8Amaster=E9=95=9C=E5=83=8F?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E5=8A=A0=E5=85=A5=E5=88=B0=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/build_images.sh | 173 +++++++++++++++++++++++++----------------- build/save_images.sh | 1 + 2 files changed, 106 insertions(+), 68 deletions(-) diff --git a/build/build_images.sh b/build/build_images.sh index 6a095b0..a88bf7f 100755 --- a/build/build_images.sh +++ b/build/build_images.sh @@ -1,138 +1,175 @@ #!/usr/bin/env bash set -euo pipefail -# 帮助信息 show_help() { - cat << EOF + cat <<'EOF' ARGUS Unified Build System - Image Build Tool Usage: $0 [OPTIONS] Options: - --intranet Use intranet mirror for Ubuntu 22.04 packages - -h, --help Show this help message + --intranet Use intranet mirror for log/bind builds + --master-offline Build master offline image (requires src/master/offline_wheels.tar.gz) + -h, --help Show this help message Examples: - $0 # Build with default sources - $0 --intranet # Build with intranet mirror - + $0 # Build with default sources + $0 --intranet # Build with intranet mirror + $0 --master-offline # Additionally build argus-master:offline + $0 --intranet --master-offline EOF } -# 解析命令行参数 use_intranet=false +build_master_offline=false while [[ $# -gt 0 ]]; do - case $1 in - --intranet) - use_intranet=true - shift - ;; - -h|--help) - show_help - exit 0 - ;; - *) - echo "Unknown option: $1" - show_help - exit 1 - ;; - esac + case $1 in + --intranet) + use_intranet=true + shift + ;; + --master-offline) + build_master_offline=true + shift + ;; + -h|--help) + show_help + exit 0 + ;; + *) + echo "Unknown option: $1" >&2 + show_help + exit 1 + ;; + esac done -# 获取项目根目录 root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" 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 "ARGUS Unified Build System" echo "=======================================" if [[ "$use_intranet" == true ]]; then - echo "🌐 Mode: Intranet (Using internal mirror: 10.68.64.1)" - build_args="--build-arg USE_INTRANET=true" + echo "🌐 Mode: Intranet (Using internal mirror: 10.68.64.1)" + build_args="--build-arg USE_INTRANET=true" else - echo "🌐 Mode: Public (Using default package sources)" - build_args="" + echo "🌐 Mode: Public (Using default package sources)" + build_args="" fi echo "📁 Build context: $root" echo "" -# 构建镜像的函数 build_image() { - local image_name=$1 - local dockerfile_path=$2 - local tag=$3 + local image_name=$1 + local dockerfile_path=$2 + local tag=$3 + local extra_args=$4 - echo "🔄 Building $image_name image..." - echo " Dockerfile: $dockerfile_path" - echo " Tag: $tag" + echo "🔄 Building $image_name image..." + echo " Dockerfile: $dockerfile_path" + echo " Tag: $tag" - if docker build $build_args -f "$dockerfile_path" -t "$tag" .; then - echo "✅ $image_name image built successfully" - return 0 - else - echo "❌ Failed to build $image_name image" - return 1 - fi + if docker build $build_args $extra_args -f "$dockerfile_path" -t "$tag" .; then + echo "✅ $image_name image built successfully" + return 0 + else + echo "❌ Failed to build $image_name image" + return 1 + fi } -# 构建所有镜像 images_built=() build_failed=false -# 构建 Elasticsearch 镜像 -if build_image "Elasticsearch" "src/log/elasticsearch/build/Dockerfile" "argus-elasticsearch:latest"; then - images_built+=("argus-elasticsearch:latest") +if build_image "Elasticsearch" "src/log/elasticsearch/build/Dockerfile" "argus-elasticsearch:latest" ""; then + images_built+=("argus-elasticsearch:latest") else - build_failed=true + build_failed=true fi echo "" -# 构建 Kibana 镜像 -if build_image "Kibana" "src/log/kibana/build/Dockerfile" "argus-kibana:latest"; then - images_built+=("argus-kibana:latest") +if build_image "Kibana" "src/log/kibana/build/Dockerfile" "argus-kibana:latest" ""; then + images_built+=("argus-kibana:latest") else - build_failed=true + build_failed=true fi echo "" -# 构建 BIND9 镜像 -if build_image "BIND9" "src/bind/build/Dockerfile" "argus-bind9:latest"; then - images_built+=("argus-bind9:latest") +if build_image "BIND9" "src/bind/build/Dockerfile" "argus-bind9:latest" ""; then + images_built+=("argus-bind9:latest") else - build_failed=true + build_failed=true fi 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 "📦 Build Summary" echo "=======================================" if [[ ${#images_built[@]} -gt 0 ]]; then - echo "✅ Successfully built images:" - for image in "${images_built[@]}"; do - echo " • $image" - done + echo "✅ Successfully built images:" + for image in "${images_built[@]}"; do + echo " • $image" + done fi if [[ "$build_failed" == true ]]; then - echo "" - echo "❌ Some images failed to build. Please check the errors above." - exit 1 + echo "" + echo "❌ Some images failed to build. Please check the errors above." + exit 1 fi if [[ "$use_intranet" == true ]]; then - echo "" - echo "🌐 Built with intranet mirror configuration" + echo "" + echo "🌐 Built with intranet mirror configuration" +fi + +if [[ "$build_master_offline" == true ]]; then + echo "" + echo "🧳 Master offline wheels 已解压到 $master_offline_dir" fi echo "" echo "🚀 Next steps:" -echo " cd src/log && ./scripts/save_images.sh # Export log images" -echo " cd src/bind && ./scripts/save_images.sh # Export bind images" -echo " cd src/log/tests && ./scripts/02_up.sh # Start log services" -echo "" \ No newline at end of file +echo " ./build/save_images.sh --compress # 导出镜像" +echo " cd src/master/tests && MASTER_IMAGE_TAG=argus-master:offline ./scripts/00_e2e_test.sh" +echo "" diff --git a/build/save_images.sh b/build/save_images.sh index ffe7151..20d9c1b 100755 --- a/build/save_images.sh +++ b/build/save_images.sh @@ -67,6 +67,7 @@ declare -A images=( ["argus-elasticsearch:latest"]="argus-elasticsearch-latest.tar" ["argus-kibana:latest"]="argus-kibana-latest.tar" ["argus-bind9:latest"]="argus-bind9-latest.tar" + ["argus-master:offline"]="argus-master-offline.tar" ) # 函数:检查镜像是否存在