From e2107ce45e0f880d31fa704c6cbc85c705dd493b Mon Sep 17 00:00:00 2001 From: yangjianbo Date: Sat, 14 Feb 2026 21:16:21 +0800 Subject: [PATCH] =?UTF-8?q?fix(build):=20Docker=20=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=E6=B3=A8=E5=85=A5=E7=89=88=E6=9C=AC=E5=8F=B7=E5=B9=B6=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=20aicodex=20=E9=95=9C=E5=83=8F=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 4 ++-- backend/cmd/server/main.go | 7 ++++++- build_image_aicodex.sh | 34 +++++++++++++++++++++++++++++----- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index c9fcf301..42726903 100644 --- a/Dockerfile +++ b/Dockerfile @@ -36,7 +36,7 @@ RUN pnpm run build FROM ${GOLANG_IMAGE} AS backend-builder # Build arguments for version info (set by CI) -ARG VERSION=docker +ARG VERSION= ARG COMMIT=docker ARG DATE ARG GOPROXY @@ -63,7 +63,7 @@ COPY --from=frontend-builder /app/backend/internal/web/dist ./internal/web/dist # Build the binary (BuildType=release for CI builds, embed frontend) RUN CGO_ENABLED=0 GOOS=linux go build \ -tags embed \ - -ldflags="-s -w -X main.Commit=${COMMIT} -X main.Date=${DATE:-$(date -u +%Y-%m-%dT%H:%M:%SZ)} -X main.BuildType=release" \ + -ldflags="-s -w -X main.Version=${VERSION} -X main.Commit=${COMMIT} -X main.Date=${DATE:-$(date -u +%Y-%m-%dT%H:%M:%SZ)} -X main.BuildType=release" \ -o /app/sub2api \ ./cmd/server diff --git a/backend/cmd/server/main.go b/backend/cmd/server/main.go index 31f2e1d1..63095209 100644 --- a/backend/cmd/server/main.go +++ b/backend/cmd/server/main.go @@ -40,7 +40,12 @@ var ( ) func init() { - // Read version from embedded VERSION file + // 如果 Version 已通过 ldflags 注入(例如 -X main.Version=...),则不要覆盖。 + if strings.TrimSpace(Version) != "" { + return + } + + // 默认从 embedded VERSION 文件读取版本号(编译期打包进二进制)。 Version = strings.TrimSpace(embeddedVersion) if Version == "" { Version = "0.0.0-dev" diff --git a/build_image_aicodex.sh b/build_image_aicodex.sh index 7b40652c..f6672ce7 100755 --- a/build_image_aicodex.sh +++ b/build_image_aicodex.sh @@ -1,8 +1,32 @@ #!/bin/bash # 本地构建镜像的快速脚本,避免在命令行反复输入构建参数。 -docker build -t yangjianbo/aicodex2api:latest \ - --build-arg GOPROXY=https://goproxy.cn,direct \ - --build-arg GOSUMDB=sum.golang.google.cn \ - -f Dockerfile \ - . +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="${SCRIPT_DIR}" + +VERSION_FILE="${REPO_ROOT}/backend/cmd/server/VERSION" +VERSION="" +if [ -f "${VERSION_FILE}" ]; then + VERSION="$(tr -d '\r\n' < "${VERSION_FILE}")" +fi + +if [ -z "${VERSION}" ]; then + echo "未找到版本号(${VERSION_FILE} 为空或不存在),将仅构建 latest 镜像" >&2 + VERSION="docker" +fi + +COMMIT="$(git -C "${REPO_ROOT}" rev-parse --short HEAD 2>/dev/null || echo docker)" +DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)" + +docker build \ + -t "yangjianbo/aicodex2api:latest" \ + -t "yangjianbo/aicodex2api:${VERSION}" \ + --build-arg VERSION="${VERSION}" \ + --build-arg COMMIT="${COMMIT}" \ + --build-arg DATE="${DATE}" \ + --build-arg GOPROXY=https://goproxy.cn,direct \ + --build-arg GOSUMDB=sum.golang.google.cn \ + -f "${REPO_ROOT}/Dockerfile" \ + "${REPO_ROOT}"