fix(ci): 修复 docker buildx 跨 job 无法复用实例导致 instance multi 找不到的问题
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user