#!/bin/bash # Ver: 1.0 by Endial Fang (endial@126.com) # # Docker 镜像构建脚本 (仅linux/amd64) IMAGE_NAME="template" REGISTRY_URL="swr.cn-north-4.myhuaweicloud.com/colovu/" APT_SOURCE="aliyun" # 获取发布版本标签 get_release_tag() { if ! git rev-parse --git-dir >/dev/null 2>&1; then echo "unknown" elif [ -n "$(git status --porcelain)" ]; then echo "latest" else # 尝试获取最近的git标签 local tag=$(git describe --tags --abbrev=0 2>/dev/null) if [ -n "$tag" ]; then echo "$tag" else local branch=$(git rev-parse --abbrev-ref HEAD) case "$branch" in master|main) echo "latest" ;; *) echo "$branch" ;; esac fi fi } # 获取镜像完整TAG get_image_tag() { local CURRENT_SUBVERSION if git rev-parse --git-dir >/dev/null 2>&1; then if [ -z "$(git status --porcelain)" ]; then CURRENT_SUBVERSION=$(git rev-parse --short=12 HEAD) else CURRENT_SUBVERSION=$(date +%Y%m%d-%H%M%S) fi local branch=$(git rev-parse --abbrev-ref HEAD) branch=$(echo "$branch" | sed -e 's/master/latest/' -e 's/main/latest/') echo "${branch}-${CURRENT_SUBVERSION}" else CURRENT_SUBVERSION=$(date +%Y%m%d-%H%M%S) echo "latest-${CURRENT_SUBVERSION}" fi } # 构建amd64架构镜像 build() { local TAG=${1:-$(get_image_tag)} echo "Building image ${IMAGE_NAME}:${TAG} (linux/amd64)" podman build --platform linux/amd64 \ --progress plain --force-rm \ --build-arg REGISTRY_URL=${REGISTRY_URL} \ --build-arg APT_SOURCE=${APT_SOURCE} \ --build-arg LOCAL_URL=http://pkgs.colovu.com/dist \ -t ${IMAGE_NAME}:${TAG} \ -t ${IMAGE_NAME}:latest \ . echo "Build complete" } # 推送镜像到colovu仓库 push_colovu() { local TAG=${1:-$(get_image_tag)} echo "Pushing ${IMAGE_NAME}:${TAG} to registry.colovu.com" podman tag "${IMAGE_NAME}:${TAG}" "registry.colovu.com/library/${IMAGE_NAME}:${TAG}" podman push "registry.colovu.com/library/${IMAGE_NAME}:${TAG}" podman tag "${IMAGE_NAME}:latest" "registry.colovu.com/library/${IMAGE_NAME}:latest" podman push "registry.colovu.com/library/${IMAGE_NAME}:latest" } # 推送镜像到华为云仓库 push_huawei() { local TAG=${1:-$(get_release_tag)} echo "Pushing ${IMAGE_NAME}:${TAG} to swr.cn-north-4.myhuaweicloud.com" podman tag "${IMAGE_NAME}:${TAG}" "swr.cn-north-4.myhuaweicloud.com/colovu/${IMAGE_NAME}:${TAG}" podman push "swr.cn-north-4.myhuaweicloud.com/colovu/${IMAGE_NAME}:${TAG}" podman tag "${IMAGE_NAME}:latest" "swr.cn-north-4.myhuaweicloud.com/colovu/${IMAGE_NAME}:latest" podman push "swr.cn-north-4.myhuaweicloud.com/colovu/${IMAGE_NAME}:latest" } # 清理工作空间 clean() { echo "Cleaning workspace..." podman images | grep "${IMAGE_NAME} " | awk '{print $3}' | xargs -L 1 podman rmi -f podman ps -a | grep "Exited" | awk '{print $1}' | xargs -L 1 podman rm podman images | grep '' | awk '{print $3}' | xargs -L 1 podman rmi -f } # 主函数中更新使用说明 main() { case "$1" in build) build "$2" ;; # 传递第二个参数作为标签 clean) clean ;; push-cv) push_colovu "$2" ;; push-hw) push_huawei "$2" ;; push) push_colovu "$2"; push_huawei "$2" ;; *) echo "Usage: $0 {build [tag]|clean|push-cv [tag]|push-hw [tag]|push [tag]}"; exit 1 ;; esac } main "$@"