build: doker镜像构建时记录构建时间与gitcommit
All checks were successful
deploy to server / build-and-deploy (push) Successful in 2m59s

- 镜像构建时会向项目目录内的version.json写入构建时间与commit-sha,并在镜像启动时输出日志
- 添加用于获取版本号的server api
This commit is contained in:
2025-11-06 17:45:02 +08:00
parent 516ad9fa1c
commit aba3729335
4 changed files with 99 additions and 1 deletions

63
docker-build.sh Executable file
View File

@ -0,0 +1,63 @@
#!/usr/bin/env bash
set -euo pipefail
# ========== 脚本配置 ==========
#
IMAGE_NAME="git.jinshen.cn/remilia/jinshen-website" # 含仓库前缀的镜像名称
DOCKERFILE="Dockerfile" # Dockerfile 文件路径
BUILD_CONTEXT="." # 构建上下文路径
PUSH_IMAGE=true # 是否推送镜像到远程仓库
DOCKER_LOGIN=false # 是否需要登录 Docker 仓库
REGISTRY_USER="" #Docker 仓库用户名
REGISTRY_PASSWORD="" #Docker 仓库密码
# ==============================
# 生成时间戳TAG
TIMESTAMP_TAG=$(date +'%Y%m%d%H%M%S')
BUILD_TIME=$(date +"%Y-%m-%d %H:%M:%S")
GIT_COMMIT=$(git rev-parse --short HEAD || echo "unknown")
echo "📦 构建镜像: ${IMAGE_NAME}"
echo "⏱️ 时间戳标签: ${TIMESTAMP_TAG}"
echo "🔖 Git 提交: ${GIT_COMMIT}"
echo "⭐ 同时构建 latest 标签"
# docker login如果启用
if [ "$DOCKER_LOGIN" = true ]; then
if [ -z "$REGISTRY_PASSWORD" ]; then
echo "❌ 登录失败:启用了 DOCKER_LOGIN但 REGISTRY_PASSWORD 为空"
exit 1
fi
echo "🔐 正在登录 Docker Registry..."
echo "$REGISTRY_PASSWORD" | docker login "$(echo "$IMAGE_NAME" | cut -d'/' -f1)" \
--username "$REGISTRY_USER" --password-stdin
fi
# 根据是否推送决定 buildx 参数
if [ "$PUSH_IMAGE" = true ]; then
BUILDX_MODE="--push"
echo "🚀 将构建并推送镜像到仓库"
else
BUILDX_MODE="--load"
echo "🛠️ 仅本地构建镜像(不推送)"
fi
# 构建镜像(带 version metadata
docker buildx build \
-t "${IMAGE_NAME}:${TIMESTAMP_TAG}" \
-t "${IMAGE_NAME}:latest" \
--build-arg BUILD_TIME="$BUILD_TIME" \
--build-arg GIT_COMMIT="$GIT_COMMIT" \
-f "$DOCKERFILE" "$BUILD_CONTEXT" \
$BUILDX_MODE
echo "🎉 镜像构建完成!"
echo "📌 可用镜像:"
echo " - ${IMAGE_NAME}:${TIMESTAMP_TAG}"
echo " - ${IMAGE_NAME}:latest"
if [ "$PUSH_IMAGE" = false ]; then
echo "⚠️ 镜像未推送PUSH_IMAGE=false"
fi