diff --git a/Dockerfile b/Dockerfile index f8a131b..fffb906 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,11 @@ ENV PYTHONUNBUFFERED=1 \ PIP_DISABLE_PIP_VERSION_CHECK=1 WORKDIR /app COPY requirements.txt ./ -RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg \ +ARG DEBIAN_MIRROR=https://deb.debian.org +RUN case "$DEBIAN_MIRROR" in https://deb.debian.org|https://mirrors.tuna.tsinghua.edu.cn) ;; *) exit 2;; esac \ + && sed -i "s|http://deb.debian.org|$DEBIAN_MIRROR|g" /etc/apt/sources.list.d/debian.sources \ + && apt-get -o Acquire::Retries=2 -o Acquire::https::Timeout=30 update \ + && apt-get -o Acquire::Retries=2 -o Acquire::https::Timeout=30 install -y --no-install-recommends ffmpeg \ && rm -rf /var/lib/apt/lists/* RUN python -m pip install --no-cache-dir -r requirements.txt \ && groupadd --gid 10001 baiyue \ diff --git a/Jenkinsfile b/Jenkinsfile index 719fda9..01080ee 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -23,6 +23,9 @@ pipeline { if (!((params.ASR_PROVIDER ?: '') in ['', 'baidu'])) { error('Gray speech provider must be baidu or disabled') } + if (!((params.DEBIAN_MIRROR ?: 'https://deb.debian.org') in ['https://deb.debian.org', 'https://mirrors.tuna.tsinghua.edu.cn'])) { + error('Select a supported Debian mirror') + } } sh '''set -eu for file in deploy/*.sh; do bash -n "$file"; done @@ -32,12 +35,12 @@ pipeline { } stage('Build and test image') { steps { - withEnv(["PYTHON_BASE_IMAGE=${params.PYTHON_BASE_IMAGE}"]) { + withEnv(["PYTHON_BASE_IMAGE=${params.PYTHON_BASE_IMAGE}", "DEBIAN_MIRROR=${params.DEBIAN_MIRROR ?: 'https://deb.debian.org'}"]) { sh '''set -eu - docker build --target test --build-arg PYTHON_BASE_IMAGE="$PYTHON_BASE_IMAGE" -t "$CHAT_IMAGE-test" . - docker build --target production --build-arg PYTHON_BASE_IMAGE="$PYTHON_BASE_IMAGE" \ + docker build --target test --build-arg PYTHON_BASE_IMAGE="$PYTHON_BASE_IMAGE" --build-arg DEBIAN_MIRROR="$DEBIAN_MIRROR" -t "$CHAT_IMAGE-test" . + docker build --target production --build-arg PYTHON_BASE_IMAGE="$PYTHON_BASE_IMAGE" --build-arg DEBIAN_MIRROR="$DEBIAN_MIRROR" \ --label "org.opencontainers.image.revision=$SOURCE_COMMIT" -t "$CHAT_IMAGE" . - docker build --target certbot --build-arg PYTHON_BASE_IMAGE="$PYTHON_BASE_IMAGE" \ + docker build --target certbot --build-arg PYTHON_BASE_IMAGE="$PYTHON_BASE_IMAGE" --build-arg DEBIAN_MIRROR="$DEBIAN_MIRROR" \ --label "org.opencontainers.image.revision=$SOURCE_COMMIT" -t "$CERTBOT_IMAGE" . ''' } diff --git a/docs/deployment.md b/docs/deployment.md index c6234be..b225624 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -19,6 +19,7 @@ | `ENVIRONMENT` | 单选 `gray`,流水线拒绝其他值 | | `SOURCE_REF` | 本次发布的不可变标签或提交,也可明确选择开发分支 | | `PYTHON_BASE_IMAGE` | 已验证的官方 Python 3.12 基础镜像 | +| `DEBIAN_MIRROR` | 默认 `https://deb.debian.org`;国内可选 `https://mirrors.tuna.tsinghua.edu.cn`,保留 Debian 签名校验 | | `PUBLIC_ORIGIN` | 独立 HTTPS 域名,不带子路径 | | `HOST_PORT` | 已确认空闲的宿主机回环端口,如 `29013` | | `GRAY_DEPLOY_DIR` | 专用目录,末级必须为 `gray-logistics-chat` |