build: doker镜像构建时记录构建时间与gitcommit
All checks were successful
deploy to server / build-and-deploy (push) Successful in 2m59s
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:
63
docker-build.sh
Executable file
63
docker-build.sh
Executable 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
|
||||
Reference in New Issue
Block a user