Compare commits

...

2 Commits

Author SHA1 Message Date
5a681e291a [#2] 把master镜像构建加入到统一构建脚本 2025-09-24 09:46:46 +00:00
3f5e369ec3 [#2] 增加离线依赖包 2025-09-24 09:29:57 +00:00
3 changed files with 106 additions and 68 deletions

View File

@ -1,26 +1,27 @@
#!/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
--master-offline Build master offline image (requires src/master/offline_wheels.tar.gz)
-h, --help Show this help message -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
@ -28,22 +29,46 @@ while [[ $# -gt 0 ]]; do
use_intranet=true use_intranet=true
shift shift
;; ;;
--master-offline)
build_master_offline=true
shift
;;
-h|--help) -h|--help)
show_help show_help
exit 0 exit 0
;; ;;
*) *)
echo "Unknown option: $1" echo "Unknown option: $1" >&2
show_help show_help
exit 1 exit 1
;; ;;
esac 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 "======================================="
@ -59,17 +84,17 @@ 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
@ -78,12 +103,10 @@ build_image() {
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
@ -91,8 +114,7 @@ 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
@ -100,14 +122,25 @@ 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 "======================================="
@ -130,9 +163,13 @@ if [[ "$use_intranet" == true ]]; then
echo "🌐 Built with intranet mirror configuration" echo "🌐 Built with intranet mirror configuration"
fi fi
if [[ "$build_master_offline" == true ]]; then
echo ""
echo "🧳 Master offline wheels 已解压到 $master_offline_dir"
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"
) )
# 函数:检查镜像是否存在 # 函数:检查镜像是否存在

Binary file not shown.