diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..f7f4b4a --- /dev/null +++ b/build.sh @@ -0,0 +1,110 @@ +#!/bin/bash +# Ver: 1.0 by Endial Fang (endial@126.com) +# +# Docker 镜像构建脚本 (仅linux/amd64) + +IMAGE_NAME="abuilder" +REGISTRY_URL="swr.cn-north-4.myhuaweicloud.com/colovu/" +APT_SOURCE="ustc" + +# 获取发布版本标签 +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 "$@" \ No newline at end of file