feat: 增加编译脚本;启用华为云镜像存储
This commit is contained in:
+11
-11
@@ -1,28 +1,28 @@
|
|||||||
# Ver: 1.10 by Endial Fang (endial@126.com)
|
# Ver: 1.11 by Endial Fang (endial@126.com)
|
||||||
#
|
#
|
||||||
|
|
||||||
# 系统默认变量 ====================================================================
|
# 系统默认变量 ====================================================================
|
||||||
# 该部分变量为系统根据编译命令默认设置
|
# 该部分变量为系统根据编译命令默认设置
|
||||||
# `TARGETPLATFORM`:构建后的目标平台信息。如 `linux/amd64`,`linux/arm/v7`,`windows/amd64`
|
# `TARGETPLATFORM`:构建后的目标平台信息。如 `linux/amd64`,`linux/arm/v7`,`windows/amd64`
|
||||||
# `TARGETOS`:目标平台信息(TARGETPLATFORM)中的操作系统部分,如:`linux`、`windows`
|
# `TARGETOS`:目标平台信息(TARGETPLATFORM)中的操作系统部分,如:`linux`、`windows`
|
||||||
# `TARGETARCH`:目标平台信息(TARGETPLATFORM)中的平台架构部分,如:`amd64`、`arm`
|
# `TARGETARCH`:目标平台信息(TARGETPLATFORM)中的平台架构部分,如:`amd64`、`arm`
|
||||||
# `TARGETVARIANT`:目标平台信息(TARGETPLATFORM)中的版本变体部分,如:`v7`
|
# `TARGETVARIANT`:目标平台信息(TARGETPLATFORM)中的版本变体部分,如:`v7`
|
||||||
# `BUILDPLATFORM`:用于构建的节点平台信息
|
# `BUILDPLATFORM`:用于构建的节点平台信息
|
||||||
# `BUILDOS`:用于构建的节点平台信息(BUILDPLATFORM)中的操作系统部分
|
# `BUILDOS`:用于构建的节点平台信息(BUILDPLATFORM)中的操作系统部分
|
||||||
# `BUILDARCH`用于构建的节点平台信息(BUILDPLATFORM)中的平台架构部分
|
# `BUILDARCH`:用于构建的节点平台信息(BUILDPLATFORM)中的平台架构部分
|
||||||
# `BUILDVARIANT`用于构建的节点平台信息(BUILDPLATFORM)中的版本变体部分
|
# `BUILDVARIANT`:用于构建的节点平台信息(BUILDPLATFORM)中的版本变体部分
|
||||||
|
|
||||||
# 可变参数 ========================================================================
|
# 可变参数 ========================================================================
|
||||||
# 该部分变量,在编译命令中通过 `--build-arg` 传入;如果未设置,则使用下面对应的默认值
|
# 该部分变量,在编译命令中通过 `--build-arg` 传入;如果未设置,则使用下面对应的默认值
|
||||||
|
|
||||||
ARG APP_NAME=dbuilder # 设置当前应用名称
|
ARG APP_NAME=dBuilder
|
||||||
ARG APP_VER=12 # 设置当前应用版本
|
ARG APP_VER=12
|
||||||
ARG REGISTRY_URL="docker.colovu.com/" # 设置默认仓库地址,默认为本地仓库;定义时需要包含末尾的`/`
|
ARG REGISTRY_URL="swr.cn-north-4.myhuaweicloud.com/colovu/"
|
||||||
ARG APT_SOURCE=aliyun # 设置 apt-get 源:default / ustc / aliyun
|
ARG APT_SOURCE=aliyun
|
||||||
ARG LOCAL_URL="http://local.colovu.com/dist" # 编译镜像时指定用于加速的本地软件包存储服务器地址
|
ARG LOCAL_URL="http://pkgs.colovu.com/dist"
|
||||||
|
|
||||||
# 1. 生成镜像 =====================================================================
|
# 1. 生成镜像 =====================================================================
|
||||||
FROM --platform=${TARGETPLATFORM:-linux/amd64} ${REGISTRY_URL}colovu/debian:${APP_VER}
|
FROM --platform=${TARGETPLATFORM:-linux/amd64} ${REGISTRY_URL}debian:${APP_VER}
|
||||||
|
|
||||||
# 声明需要使用的全局可变参数(ARG声明的变量仅编译打包阶段有效)
|
# 声明需要使用的全局可变参数(ARG声明的变量仅编译打包阶段有效)
|
||||||
ARG APP_NAME
|
ARG APP_NAME
|
||||||
@@ -32,7 +32,7 @@ ARG APT_SOURCE
|
|||||||
LABEL \
|
LABEL \
|
||||||
"Version"="v${APP_VER}" \
|
"Version"="v${APP_VER}" \
|
||||||
"Description"="Docker image for Builder based on Debian." \
|
"Description"="Docker image for Builder based on Debian." \
|
||||||
"Github"="https://github.com/colovu/docker-${APP_NAME}" \
|
"Github"="https://gitee.com/colovu/docker-${APP_NAME}" \
|
||||||
"Vendor"="Endial Fang (endial@126.com)"
|
"Vendor"="Endial Fang (endial@126.com)"
|
||||||
|
|
||||||
# 以下命令安装的软件包
|
# 以下命令安装的软件包
|
||||||
|
|||||||
@@ -0,0 +1,110 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Ver: 1.0 by Endial Fang (endial@126.com)
|
||||||
|
#
|
||||||
|
# Docker 镜像构建脚本 (仅linux/amd64)
|
||||||
|
|
||||||
|
IMAGE_NAME="dbuilder"
|
||||||
|
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 '<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 "$@"
|
||||||
Reference in New Issue
Block a user