From 718ddc109b2002ef648caa0e27677dbfd32b64cc Mon Sep 17 00:00:00 2001 From: Endial Fang Date: Fri, 23 Jan 2026 09:34:29 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BF=AE=E5=A4=8Dnginx=201.28.1?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E8=84=9A=E6=9C=AC=E8=B0=83=E7=94=A8=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E5=B9=B6=E5=8D=87=E7=BA=A7=E5=88=B0=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9E=B6=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复Dockerfile中脚本调用缺少完整路径问题 - 修复customer脚本中错误的/colovu/lib/路径引用 - 升级build.sh采用新版build_local.sh架构 - 更新overrides脚本文件名匹配1.28.1版本号 - 统一架构检测使用TARGETARCH变量 - 保持nginx 1.28.1版本不变,仅修复架构问题 --- Dockerfile | 12 +- build.sh | 181 ++---------------- customer/usr/local/bin/common.sh | 14 +- customer/usr/local/bin/entry.sh | 2 +- customer/usr/local/bin/run.sh | 2 +- customer/usr/local/bin/setup.sh | 6 +- ...verrides-1.24.0.sh => overrides-1.28.1.sh} | 0 7 files changed, 33 insertions(+), 184 deletions(-) rename customer/usr/local/overrides/{overrides-1.24.0.sh => overrides-1.28.1.sh} (100%) diff --git a/Dockerfile b/Dockerfile index 2cb721f..a261cc1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -35,10 +35,10 @@ ARG LOCAL_URL ARG TARGETARCH # 选择软件包源,加速后续软件包安装 -RUN select_source ${APT_SOURCE}; +RUN /usr/local/sbin/select_source ${APT_SOURCE}; # 安装依赖的软件包及库 -RUN install_pkg libperl-dev \ +RUN /usr/local/sbin/install_pkg libperl-dev \ libpcre2-32-0 libpcre2-16-0 libpcre2-posix3 libpcre2-dev \ zlib1g zlib1g-dev \ libxslt1.1 libxslt1-dev \ @@ -53,11 +53,11 @@ RUN set -eux; \ appUrls="${localURL:-} \ http://nginx.org/download \ "; \ - download_pkg unpack ${appName} "${appUrls}"; + /usr/local/sbin/download_pkg unpack ${appName} "${appUrls}"; # 源码编译: 编译后将配置文件模板拷贝至 /usr/local/${app_name}/share/${app_name} 中 RUN set -eux; \ - APP_ARCH=`arch` \ + APP_ARCH=${TARGETARCH:-$(dpkg --print-architecture)}; \ APP_SRC="/tmp/${APP_NAME}-${APP_VER}"; \ cd ${APP_SRC}; \ LDFLAGS="-L/usr/local/lib -L/usr/lib/${APP_ARCH}-linux-gnu" \ @@ -167,9 +167,9 @@ RUN set -eux; \ \ /bin/bash -c "ln -sf /usr/local/${APP_NAME}/etc/${APP_NAME} /etc/"; \ \ - select_source ${APT_SOURCE}; \ + /usr/local/sbin/select_source ${APT_SOURCE}; \ \ - install_pkg `cat /usr/local/${APP_NAME}/runDeps`; \ + /usr/local/sbin/install_pkg `cat /usr/local/${APP_NAME}/runDeps`; \ \ overrideShell="/usr/local/overrides/overrides-${APP_VER}.sh"; \ [ -e "${overrideShell}" ] && /bin/bash "${overrideShell}"; \ diff --git a/build.sh b/build.sh index 931fd9f..8016c2f 100755 --- a/build.sh +++ b/build.sh @@ -1,175 +1,24 @@ #!/bin/bash -# Ver: 2.0 by Endial Fang (endial@126.com) +# Ver: 3.0 by Endial Fang (endial@126.com) # -# Docker 镜像构建脚本 (仅linux/amd64) +# Docker 镜像构建脚本 - 主入口 # 编译后镜像名称 -IMAGE_NAME="golang" +export IMAGE_NAME="nginx" # 依赖镜像的仓库地址 -REGISTRY_URL="swr.cn-north-4.myhuaweicloud.com/colovu/" +export REGISTRY_URL="swr.cn-north-4.myhuaweicloud.com/colovu/" # 源仓库地址(本地编译时,使用阿里云源仓库) -APT_SOURCE="aliyun" -APP_VER="1.23.12" -LOCAL_URL="http://pkgs.colovu.com/dist" +export APT_SOURCE="aliyun" +# 针对无法直接下载到软件包,本地变异时,使用缓存的软件包 +export LOCAL_URL="http://pkgs.colovu.com/dist" -# 获取发布版本标签 -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 -} - -# 根据当前系统架构构建镜像 -build() { - local TAG=${1:-$(get_image_tag)} - - # 获取当前系统的架构 - local ARCH=$(uname -m) - local PLATFORM="" - case "$ARCH" in - x86_64) - PLATFORM="linux/amd64" - ;; - aarch64|arm64) - PLATFORM="linux/arm64" - ;; - armv7l) - PLATFORM="linux/arm/v7" - ;; - *) - PLATFORM="linux/amd64" # 默认为 amd64 - ;; - esac - - # 如果在命令中指定了TAG,则使用相同的TAG作为APP_VER - if [ -n "$1" ]; then - APP_VER="$1" - else - # 获取当前分支名并判断是否为主分支 - local branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null) - if [ "$branch" != "master" ] && [ "$branch" != "main" ]; then - # 如果不是主分支,则使用分支名或标签名 - local tag=$(git describe --tags --abbrev=0 2>/dev/null) - if [ -n "$tag" ] && [ "$(git rev-list -n 1 $tag 2>/dev/null)" = "$(git rev-parse HEAD)" ]; then - # 如果当前提交正好是标签,则使用标签名 - APP_VER="$tag" - else - # 否则使用分支名 - APP_VER="$branch" - fi - fi - fi - - # 去除APP_VER中的v前缀,仅保留数字分段部分 - APP_VER=$(echo "$APP_VER" | sed 's/^v//') - - echo "Building image ${IMAGE_NAME}:${TAG} (${PLATFORM}) with APP_VER=${APP_VER}" - - podman build --platform ${PLATFORM} \ - --progress plain --force-rm \ - --build-arg REGISTRY_URL=${REGISTRY_URL} \ - --build-arg APT_SOURCE=${APT_SOURCE} \ - --build-arg APP_VER=${APP_VER} \ - --build-arg LOCAL_URL=${LOCAL_URL:-} \ - -t ${IMAGE_NAME}:${TAG} \ - -t ${IMAGE_NAME}:latest \ - . - - echo "Build complete" -} - -# 清理工作空间 -clean() { - echo "Cleaning workspace..." - # 删除所有与 IMAGE_NAME 相关的镜像标签(包括带 localhost 前缀的) - podman images --format "{{.Repository}}:{{.Tag}}" | grep -E "^(${IMAGE_NAME}|localhost/${IMAGE_NAME}):" | xargs -r podman rmi -f - # 删除所有已退出的容器 - podman ps -a --format "{{.ID}}" --filter status=exited | xargs -r podman rm - # 删除所有悬空镜像(dangling images) - podman images --filter "dangling=true" -q | xargs -r podman rmi -f - # 清理构建缓存 - podman system prune -f -} - -# 显示使用帮助信息 -show_help() { - cat << EOF -Usage: $0 [COMMAND] [TAG] - -Docker 镜像构建和清理脚本 - -COMMANDS: - build [tag] 构建镜像,可选择性指定标签,如未指定则自动生成 - clean 清理工作空间,删除相关镜像和无用容器 - help 显示此帮助信息 - -EXAMPLES: - $0 build # 构建镜像,使用自动生成的标签 - $0 build mytag # 构建镜像,使用指定标签 - $0 clean # 清理工作空间 - $0 help # 显示帮助信息 - -DESCRIPTION: - 该脚本用于构建 alpine 镜像,支持自动生成标签,包含清理功能。 - 构建的镜像名称为 ${IMAGE_NAME},默认会同时生成 latest 标签。 - 脚本会根据当前系统架构自动构建对应架构的镜像,并设置 APP_VER 参数(自动去除v前缀): - - 根据当前系统架构自动选择平台(linux/amd64, linux/arm64, linux/arm/v7 等) - - 当在命令中指定TAG时,APP_VER使用相同的TAG值(去除v前缀) - - 主分支(master/main)时使用 latest - - 其他分支时使用分支名 - - 标签提交时使用标签名(去除v前缀) -EOF -} - -# 主函数 -main() { - case "$1" in - build) build "$2" ;; # 传递第二个参数作为标签 - clean) clean ;; - help|-h|--help) show_help ;; - *) - if [ -z "$1" ]; then - show_help - else - echo "Error: Unknown command '$1'" - echo "" - show_help +# 引入本地构建脚本 +if [ -f ".ci/common/build_local.sh" ]; then + # 执行本地构建脚本并传递参数 + exec ".ci/common/build_local.sh" "$@" +else + echo "Error: .ci/common/build_local.sh script not found!" exit 1 - fi - ;; - esac -} +fi + -main "$@" diff --git a/customer/usr/local/bin/common.sh b/customer/usr/local/bin/common.sh index 4f333f8..afe7162 100644 --- a/customer/usr/local/bin/common.sh +++ b/customer/usr/local/bin/common.sh @@ -3,14 +3,14 @@ # # 应用通用业务处理函数 -. /colovu/lib/libcommon.sh # 通用函数库 +. /usr/local/lib/libcommon.sh # 通用函数库 -. /colovu/lib/libfile.sh -. /colovu/lib/libfs.sh -. /colovu/lib/liblog.sh -. /colovu/lib/libos.sh -. /colovu/lib/libservice.sh -. /colovu/lib/libvalidations.sh +. /usr/local/lib/libfile.sh +. /usr/local/lib/libfs.sh +. /usr/local/lib/liblog.sh +. /usr/local/lib/libos.sh +. /usr/local/lib/libservice.sh +. /usr/local/lib/libvalidations.sh # 检测应用相应的配置文件是否存在,如果不存在,则从默认配置文件目录拷贝一份 # 默认配置文件路径:/etc/${APP_NAME} diff --git a/customer/usr/local/bin/entry.sh b/customer/usr/local/bin/entry.sh index 18bbc8b..e613cd6 100755 --- a/customer/usr/local/bin/entry.sh +++ b/customer/usr/local/bin/entry.sh @@ -7,7 +7,7 @@ # -e: 命令执行错误则报错(errexit); -u: 变量未定义则报错(nounset); -x: 打印实际待执行的命令行; -o pipefail: 设置管道中命令遇到失败则报错 set -euo pipefail -. /colovu/lib/libcommon.sh # 加载通用函数库 +. /usr/local/lib/libcommon.sh # 加载通用函数库 . /usr/local/bin/environment.sh # 设置环境变量 diff --git a/customer/usr/local/bin/run.sh b/customer/usr/local/bin/run.sh index 91a0cdc..22e237f 100755 --- a/customer/usr/local/bin/run.sh +++ b/customer/usr/local/bin/run.sh @@ -7,7 +7,7 @@ # -e: 命令执行错误则报错(errexit); -u: 变量未定义则报错(nounset); -x: 打印实际待执行的命令行; -o pipefail: 设置管道中命令遇到失败则报错 set -euo pipefail -. /colovu/lib/liblog.sh # 日志输出函数库 +. /usr/local/lib/liblog.sh # 日志输出函数库 . /usr/local/bin/environment.sh # 设置环境变量 diff --git a/customer/usr/local/bin/setup.sh b/customer/usr/local/bin/setup.sh index 065da69..7f45b80 100755 --- a/customer/usr/local/bin/setup.sh +++ b/customer/usr/local/bin/setup.sh @@ -7,9 +7,9 @@ # -e: 命令执行错误则报错(errexit); -u: 变量未定义则报错(nounset); -x: 打印实际待执行的命令行; -o pipefail: 设置管道中命令遇到失败则报错 set -euo pipefail -. /colovu/lib/libcommon.sh # 加载通用函数库 -. /colovu/lib/libfs.sh # 加载文件操作函数库 -. /colovu/lib/libos.sh # 加载系统管理函数库 +. /usr/local/lib/libcommon.sh # 加载通用函数库 +. /usr/local/lib/libfs.sh # 加载文件操作函数库 +. /usr/local/lib/libos.sh # 加载系统管理函数库 . /usr/local/bin/environment.sh # 设置环境变量 . /usr/local/bin/common.sh # 应用专用函数库 diff --git a/customer/usr/local/overrides/overrides-1.24.0.sh b/customer/usr/local/overrides/overrides-1.28.1.sh similarity index 100% rename from customer/usr/local/overrides/overrides-1.24.0.sh rename to customer/usr/local/overrides/overrides-1.28.1.sh