Files
jinshen-website/docker-build.sh
R2m1liA aba3729335
All checks were successful
deploy to server / build-and-deploy (push) Successful in 2m59s
build: doker镜像构建时记录构建时间与gitcommit
- 镜像构建时会向项目目录内的version.json写入构建时间与commit-sha,并在镜像启动时输出日志
- 添加用于获取版本号的server api
2025-11-06 17:45:09 +08:00

64 lines
2.1 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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