feat: 增加编译脚本;启用华为云镜像存储

This commit is contained in:
2025-04-21 12:21:00 +08:00
parent 2f31d6cc88
commit a3bc4e9462
Executable
+110
View File
@@ -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 '<none>' | 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 "$@"