From 3eb44d8a7366a7593bd78015bcb4d461c8b528dc Mon Sep 17 00:00:00 2001 From: zetaloop Date: Wed, 1 Apr 2026 06:11:28 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20build.sh=20=E6=94=B9=E7=94=A8=20bui?= =?UTF-8?q?ldx=20bake=20=E5=B9=B6=E8=A1=8C=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/dev/README.md | 6 ++-- deploy/dev/build.sh | 69 ++++++++++++++++++++++++++++++-------------- 2 files changed, 51 insertions(+), 24 deletions(-) diff --git a/deploy/dev/README.md b/deploy/dev/README.md index 9b8380c..f92d05c 100644 --- a/deploy/dev/README.md +++ b/deploy/dev/README.md @@ -2,8 +2,8 @@ ## 前置条件 -- Docker -- Go 1.25+(构建镜像时在容器内编译,本机不强制) +- Docker(需要 buildx) +- Python 3(构建脚本用于生成 bake 定义) ## 使用 @@ -23,7 +23,7 @@ docker compose ps docker compose down ``` -构建脚本会扫描 `app/` 下所有 `api`、`rpc`、`mq` 入口,生成 `juwan/-:dev` 镜像。编译失败的服务会跳过,不影响其他服务。 +构建脚本会扫描 `app/` 下所有 `api`、`rpc`、`mq` 入口,通过 `docker buildx bake` 并行构建所有服务镜像,生成 `juwan/-:dev`。 如需只启动部分服务: diff --git a/deploy/dev/build.sh b/deploy/dev/build.sh index 58d27e9..1035cbc 100755 --- a/deploy/dev/build.sh +++ b/deploy/dev/build.sh @@ -2,33 +2,31 @@ set -euo pipefail ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)" -IMAGE_PREFIX="juwan" +IMAGE_PREFIX="${IMAGE_PREFIX:-juwan}" IMAGE_TAG="${1:-dev}" cd "$ROOT_DIR" -find app -mindepth 2 -maxdepth 2 -type d \( -name "api" -o -name "rpc" -o -name "mq" \) | sort | while read -r service_dir; do - service_type=$(basename "$service_dir") - service_name=$(basename "$(dirname "$service_dir")") +bakefile=$(mktemp "${TMPDIR:-/tmp}/juwan-bake-XXXXXX") +mv "$bakefile" "${bakefile}.json" +bakefile="${bakefile}.json" - entry_file=$(grep -rl "package main" "$service_dir"/*.go 2>/dev/null | head -n 1 || true) - [[ -z "$entry_file" ]] && continue +python3 - "$IMAGE_PREFIX" "$IMAGE_TAG" "$bakefile" <<'PYEOF' +import json, os, subprocess, sys, glob - config_file=$(ls "$service_dir/etc/"*.yaml 2>/dev/null | head -n 1 || true) - config_name="${config_file:+$(basename "$config_file")}" - config_name="${config_name:-config.yaml}" +prefix, tag, outpath = sys.argv[1], sys.argv[2], sys.argv[3] - image_name="${IMAGE_PREFIX}/${service_name}-${service_type}:${IMAGE_TAG}" - echo "--- $image_name ---" - - cat > Dockerfile.tmp < {outpath}") +PYEOF + +docker buildx bake --load -f "$bakefile" +rm -f "$bakefile"