Ver código fonte

feat: add global BUILD_NUMBER and GIT_COMMIT parameters, declare ARG in both stages

Builder 2 meses atrás
pai
commit
f5a7ebfd41

+ 17 - 8
build-docker-optimized.sh

@@ -19,6 +19,10 @@ BLUE='\033[0;34m'
 CYAN='\033[0;36m'
 NC='\033[0m'  # No Color
 
+# 全局构建参数(同一次构建中所有镜像共享)
+BUILD_NUMBER=$(date +%Y%m%d%H%M%S)
+GIT_COMMIT=$(git rev-parse --short HEAD 2>/dev/null ; echo "unknown")
+
 # 函数:打印颜色信息
 log_info() {
     echo -e "${BLUE}[INFO]${NC} $1"
@@ -167,8 +171,6 @@ build_image() {
         return 1
     fi
     
-    local build_number=$(date +%Y%m%d%H%M%S)
-    local git_commit=$(git rev-parse --short HEAD 2>/dev/null ; echo "unknown")
     local start_time=$(date +%s)
     
     # 打印构建信息
@@ -180,18 +182,18 @@ build_image() {
     log_info "镜像标签:  $tag"
     log_info "仓库地址:  $REGISTRY"
     log_info "镜像名称:  $image_name"
-    log_info "Git 提交:  $git_commit"
-    log_info "构建号:    $build_number"
+    log_info "Git 提交:  $GIT_COMMIT"
+    log_info "构建号:    $BUILD_NUMBER"
     [ -n "$NO_CACHE" ] && log_warn "禁用构建缓存"
     echo ""
     
     log_info "开始构建镜像..."
     echo ""
     
-    # 执行 Docker 构建
+    # 执行 Docker 构建(传递全局构建参数)
     if docker build $NO_CACHE \
-        --build-arg BUILD_NUMBER="$build_number" \
-        --build-arg GIT_COMMIT="$git_commit" \
+        --build-arg BUILD_NUMBER="$BUILD_NUMBER" \
+        --build-arg GIT_COMMIT="$GIT_COMMIT" \
         -t "$image_name" \
         -f "$dockerfile" \
         .; then
@@ -243,7 +245,7 @@ build_image() {
         echo ""
         log_error "调试建议:"
         echo "  # 查看 Docker 构建日志(详细信息)"
-        echo "  docker build $NO_CACHE --build-arg BUILD_NUMBER=\"$build_number\" -t \"$image_name\" -f \"$dockerfile\" . --progress=plain"
+        echo "  docker build $NO_CACHE --build-arg BUILD_NUMBER=\"$BUILD_NUMBER\" --build-arg GIT_COMMIT=\"$GIT_COMMIT\" -t \"$image_name\" -f \"$dockerfile\" . --progress=plain"
         echo ""
         return 1
     fi
@@ -286,6 +288,8 @@ done
 
 echo ""
 log_info "将按顺序构建 ${#BUILD_TARGETS[@]} 个镜像"
+log_info "全局构建号: $BUILD_NUMBER"
+log_info "全局 Git 提交: $GIT_COMMIT"
 
 # 检查 git 仓库状态
 if [ -z "$(git status --porcelain 2>/dev/null)" ]; then
@@ -338,6 +342,11 @@ fi
 
 echo ""
 log_info "════════════════════════════════════════════════════════════"
+log_info "构建信息:"
+log_info "════════════════════════════════════════════════════════════"
+log_info "构建号:    $BUILD_NUMBER"
+log_info "Git 提交: $GIT_COMMIT"
+echo ""
 log_info "下一步操作:"
 log_info "════════════════════════════════════════════════════════════"
 echo "  # 查看镜像列表"

+ 8 - 3
shop-recycle-gateway/Dockerfile.optimized

@@ -1,5 +1,5 @@
 # ============================================
-# Build stage - 修复版本(先构建内部依赖)
+# Build stage - 构建网关服务
 # ============================================
 FROM maven:3.8-openjdk-8 AS builder
 
@@ -18,8 +18,7 @@ COPY shop-recycle-gateway ./shop-recycle-gateway
 COPY shop-recycle-order-service ./shop-recycle-order-service
 COPY shop-recycle-payment-service ./shop-recycle-payment-service
 
-# 关键修复:第一步先安装 parent pom 到本地仓库
-# 执行在根目录的 pom,这样会安装 parent(spring-cloud-log-demo)
+# 第一步:先安装所有模块到本地仓库
 RUN mvn clean install -DskipTests -B -q
 
 # 第二步:下载 gateway 的所有依赖
@@ -35,8 +34,14 @@ RUN mvn package -DskipTests -B -q -pl shop-recycle-gateway
 # ============================================
 FROM openjdk:8-jre-alpine
 
+# 在 runtime stage 中重新声明 ARG(这样才能在 LABEL 中使用)
+ARG BUILD_NUMBER=local
+ARG GIT_COMMIT=unknown
+
 LABEL maintainer="shop-recycle"
 LABEL service="shop-recycle-gateway"
+LABEL build.number="${BUILD_NUMBER}"
+LABEL git.commit="${GIT_COMMIT}"
 
 ENV TZ=Asia/Shanghai
 ENV JAVA_OPTS="-Xms256m -Xmx512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"

+ 6 - 2
shop-recycle-order-service/Dockerfile.optimized

@@ -35,10 +35,14 @@ RUN mvn package -DskipTests -B -q \
 # ============================================
 FROM openjdk:8-jre-alpine
 
+# 在 runtime stage 中重新声明 ARG(这样才能在 LABEL 中使用)
+ARG BUILD_NUMBER=local
+ARG GIT_COMMIT=unknown
+
 LABEL maintainer="shop-recycle"
 LABEL service="shop-recycle-order-service"
-LABEL build.number=${BUILD_NUMBER}
-LABEL git.commit=${GIT_COMMIT}
+LABEL build.number="${BUILD_NUMBER}"
+LABEL git.commit="${GIT_COMMIT}"
 
 ENV TZ=Asia/Shanghai
 ENV JAVA_OPTS="-Xms256m -Xmx512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"

+ 6 - 2
shop-recycle-payment-service/Dockerfile.optimized

@@ -35,10 +35,14 @@ RUN mvn package -DskipTests -B -q \
 # ============================================
 FROM openjdk:8-jre-alpine
 
+# 在 runtime stage 中重新声明 ARG(这样才能在 LABEL 中使用)
+ARG BUILD_NUMBER=local
+ARG GIT_COMMIT=unknown
+
 LABEL maintainer="shop-recycle"
 LABEL service="shop-recycle-payment-service"
-LABEL build.number=${BUILD_NUMBER}
-LABEL git.commit=${GIT_COMMIT}
+LABEL build.number="${BUILD_NUMBER}"
+LABEL git.commit="${GIT_COMMIT}"
 
 ENV TZ=Asia/Shanghai
 ENV JAVA_OPTS="-Xms256m -Xmx512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"