fix(ci): 修复 docker buildx 跨 job 无法复用实例导致 instance multi 找不到的问题
构建并部署 BYW VoiceHub / Preflight 语法与构建检查 (push) Failing after 3m2s
构建并部署 BYW VoiceHub / 镜像构建·预热(与 Preflight 并发:系统/镜像源/Builder 初始化) (push) Successful in 4m14s
构建并部署 BYW VoiceHub / 构建并推送容器镜像 (push) Skipped
构建并部署 BYW VoiceHub / 部署到生产服务器 (push) Skipped

This commit is contained in:
2026-09-13 14:21:22 +08:00
parent 9a025f5bd5
commit d3d2673e5c
+58 -2
View File
@@ -509,6 +509,64 @@ jobs:
image_full: ${{ needs.meta-warmup.outputs.image_full }} image_full: ${{ needs.meta-warmup.outputs.image_full }}
image_latest: ${{ needs.meta-warmup.outputs.image_latest }} image_latest: ${{ needs.meta-warmup.outputs.image_latest }}
steps: steps:
- name: 检出代码
run: |
set -euxo pipefail
REPO_URL="https://${GITEA_HOST}/${GITHUB_REPOSITORY}.git"
BRANCH="${GITHUB_REF_NAME:-main}"
git clone --depth 1 -b "${BRANCH}" "${REPO_URL}" .
- name: 初始化 Docker Buildx builder (为本作业重新创建)
env:
REGISTRY_USER: ${{ secrets.REGISTRY_USER || github.actor }}
REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN || github.token }}
run: |
set -euxo pipefail
if [ -z "${REGISTRY_TOKEN}" ]; then
echo "ERROR: REGISTRY_TOKEN 为空。请在 Repository Secrets 中新建 REGISTRY_TOKEN"
exit 1
fi
REGISTRY_USER="${REGISTRY_USER,,}"
BUILDER_NAME="multi"
BUILDKIT_IMAGE="moby/buildkit:buildx-stable-1"
BKK_CFG="$(mktemp -t buildkitd_XXXXXX.toml)"
{
printf '[worker.oci]\n max-parallelism = 2\n\n'
printf '[registry."docker.io"]\n mirrors = ["docker.m.daocloud.io","dockerproxy.com","hub-mirror.c.163.com","docker.nju.edu.cn","docker.mirrors.ustc.edu.cn"]\n\n'
printf '[registry."ghcr.io"]\n mirrors = ["ghcr.nju.edu.cn","ghcr.dockerproxy.com"]\n\n'
printf '[registry."k8s.gcr.io"]\n mirrors = ["k8s-gcr.m.daocloud.io","registry.cn-hangzhou.aliyuncs.com/google_containers"]\n\n'
printf '[registry."%s"]\n username = "%s"\n password = "%s"\n' "${GITEA_HOST}" "${REGISTRY_USER}" "${REGISTRY_TOKEN}"
} > "${BKK_CFG}"
PULLED=0
for MIRROR in \
"docker.m.daocloud.io/${BUILDKIT_IMAGE}" \
"dockerproxy.com/${BUILDKIT_IMAGE}" \
"hub-mirror.c.163.com/${BUILDKIT_IMAGE}" \
"docker.nju.edu.cn/${BUILDKIT_IMAGE}" \
"docker.mirrors.ustc.edu.cn/${BUILDKIT_IMAGE}" \
"${BUILDKIT_IMAGE}"; do
if docker pull "${MIRROR}" 2>/dev/null; then
if [ "${MIRROR}" != "${BUILDKIT_IMAGE}" ]; then
docker tag "${MIRROR}" "${BUILDKIT_IMAGE}" 2>/dev/null || true
fi
PULLED=1
break
fi
done
[ "${PULLED}" = "1" ] || { echo "ERROR: 无法拉取 buildkitd 基础镜像"; exit 1; }
printf '%s' "${REGISTRY_TOKEN}" | docker login "${GITEA_HOST}" -u "${REGISTRY_USER}" --password-stdin
docker buildx rm "${BUILDER_NAME}" 2>/dev/null || true
docker buildx create \
--name "${BUILDER_NAME}" \
--driver docker-container \
--use \
--config "${BKK_CFG}" \
--buildkitd-flags '--allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host' \
--driver-opt network=host \
--driver-opt "image=${BUILDKIT_IMAGE}"
rm -f "${BKK_CFG}"
docker buildx inspect --bootstrap
- name: 复用 meta-warmup 结果(与 Preflight 并发省 ~5min) - name: 复用 meta-warmup 结果(与 Preflight 并发省 ~5min)
run: | run: |
set -euo pipefail set -euo pipefail
@@ -522,8 +580,6 @@ jobs:
echo "[meta-warmup] image_latest=${{ needs.meta-warmup.outputs.image_latest }}" echo "[meta-warmup] image_latest=${{ needs.meta-warmup.outputs.image_latest }}"
echo "[meta-warmup] repo_owner=${{ needs.meta-warmup.outputs.repo_owner }}" echo "[meta-warmup] repo_owner=${{ needs.meta-warmup.outputs.repo_owner }}"
echo "[meta-warmup] repo_name=${{ needs.meta-warmup.outputs.repo_name }}" echo "[meta-warmup] repo_name=${{ needs.meta-warmup.outputs.repo_name }}"
docker buildx use multi
docker buildx inspect
- name: 构建并推送镜像 - name: 构建并推送镜像
env: env: