diff --git a/build/build_images.sh b/build/build_images.sh index 6da1b7e..384053f 100755 --- a/build/build_images.sh +++ b/build/build_images.sh @@ -12,8 +12,8 @@ Options: --master-offline Build master offline image (requires src/master/offline_wheels.tar.gz) --metric Build metric module images (ftp, prometheus, grafana, test nodes) --no-cache Build all images without using Docker layer cache - --only LIST Comma-separated targets to build: core,master,metric,web,alert,sys,gpu_bundle,all - --version DATE Bundle date tag used by gpu_bundle (e.g. 20251112) + --only LIST Comma-separated targets to build: core,master,metric,web,alert,sys,gpu_bundle,server_pkg,client_pkg,all + --version DATE Date tag used by gpu_bundle/server_pkg/client_pkg (e.g. 20251112) --client-semver X.Y.Z Override client semver used in all-in-one-full artifact (optional) --cuda VER CUDA runtime version for NVIDIA base (default: 12.2.2) -h, --help Show this help message @@ -36,6 +36,8 @@ build_web=true build_alert=true build_sys=true build_gpu_bundle=false +build_server_pkg=false +build_client_pkg=false no_cache=false bundle_date="" @@ -71,7 +73,7 @@ while [[ $# -gt 0 ]]; do fi sel="$2"; shift 2 # reset all, then enable selected - build_core=false; build_master=false; build_metric=false; build_web=false; build_alert=false; build_sys=false; build_gpu_bundle=false + build_core=false; build_master=false; build_metric=false; build_web=false; build_alert=false; build_sys=false; build_gpu_bundle=false; build_server_pkg=false; build_client_pkg=false IFS=',' read -ra parts <<< "$sel" for p in "${parts[@]}"; do case "$p" in @@ -82,6 +84,8 @@ while [[ $# -gt 0 ]]; do alert) build_alert=true ;; sys) build_sys=true ;; gpu_bundle) build_gpu_bundle=true ;; + server_pkg) build_server_pkg=true; build_core=true; build_master=true; build_metric=true; build_web=true; build_alert=true ;; + client_pkg) build_client_pkg=true ;; all) build_core=true; build_master=true; build_metric=true; build_web=true; build_alert=true; build_sys=true ;; *) echo "Unknown --only target: $p" >&2; exit 1 ;; esac @@ -394,6 +398,79 @@ build_gpu_bundle_image() { fi } +# Tag helper: ensure : exists for a list of repos +ensure_version_tags() { + local date_tag="$1"; shift + local repos=("$@") + for repo in "${repos[@]}"; do + if docker image inspect "$repo:$date_tag" >/dev/null 2>&1; then + : + elif docker image inspect "$repo:latest" >/dev/null 2>&1; then + docker tag "$repo:latest" "$repo:$date_tag" || true + else + echo "āŒ missing image for tagging: $repo (need :latest or :$date_tag)" >&2 + return 1 + fi + done + return 0 +} + +# Build server package after images are built +build_server_pkg_bundle() { + local date_tag="$1" + if [[ -z "$date_tag" ]]; then + echo "āŒ server_pkg requires --version YYMMDD" >&2 + return 1 + fi + local repos=( + argus-bind9 argus-master argus-elasticsearch argus-kibana \ + argus-metric-ftp argus-metric-prometheus argus-metric-grafana \ + argus-alertmanager argus-web-frontend argus-web-proxy + ) + echo "\nšŸ”– Tagging server images with :$date_tag and collecting digests" + if ! ensure_version_tags "$date_tag" "${repos[@]}"; then + return 1 + fi + # Optional: show digests + for repo in "${repos[@]}"; do + local digest + digest=$(docker images --digests --format '{{.Repository}}:{{.Tag}} {{.Digest}}' | awk -v r="$repo:$date_tag" '$1==r{print $2}' | head -n1) + printf ' • %s@%s\n' "$repo:$date_tag" "${digest:-}" + done + echo "\nšŸ“¦ Building server package via deployment_new/build/make_server_package.sh --version $date_tag" + if ! "$root/deployment_new/build/make_server_package.sh" --version "$date_tag"; then + echo "āŒ make_server_package.sh failed" >&2 + return 1 + fi + return 0 +} + +# Build client package: ensure gpu bundle image exists, then package client_gpu +build_client_pkg_bundle() { + local date_tag="$1" + local semver="$2" + local cuda="$3" + if [[ -z "$date_tag" ]]; then + echo "āŒ client_pkg requires --version YYMMDD" >&2 + return 1 + fi + local bundle_tag="argus-sys-metric-test-node-bundle-gpu:${date_tag}" + if ! docker image inspect "$bundle_tag" >/dev/null 2>&1; then + echo "\n🧩 GPU bundle image $bundle_tag missing; building it first..." + if ! build_gpu_bundle_image "$date_tag" "$cuda" "$semver"; then + return 1 + fi + else + echo "\nāœ… Using existing GPU bundle image: $bundle_tag" + fi + echo "\nšŸ“¦ Building client GPU package via deployment_new/build/make_client_gpu_package.sh --version $date_tag --image $bundle_tag" + if ! "$root/deployment_new/build/make_client_gpu_package.sh" --version "$date_tag" --image "$bundle_tag"; then + echo "āŒ make_client_gpu_package.sh failed" >&2 + return 1 + fi + return 0 +} + if [[ "$build_core" == true ]]; then if build_image "Elasticsearch" "src/log/elasticsearch/build/Dockerfile" "argus-elasticsearch:latest"; then images_built+=("argus-elasticsearch:latest") @@ -579,6 +656,26 @@ if [[ "$build_gpu_bundle" == true ]]; then fi fi +# ======================================= +# One-click Server/Client packaging +# ======================================= + +if [[ "$build_server_pkg" == true ]]; then + echo "" + echo "🧳 Building one-click Server package..." + if ! build_server_pkg_bundle "${bundle_date}"; then + build_failed=true + fi +fi + +if [[ "$build_client_pkg" == true ]]; then + echo "" + echo "🧳 Building one-click Client-GPU package..." + if ! build_client_pkg_bundle "${bundle_date}" "${client_semver}" "${cuda_ver}"; then + build_failed=true + fi +fi + echo "=======================================" echo "šŸ“¦ Build Summary" echo "======================================="