CI:build-push 改用 dind 容器(自起 daemon,不依赖宿主 sock),修默认镜像拉取失败;补 outputs.version
This commit is contained in:
@@ -44,24 +44,33 @@ jobs:
|
|||||||
name: 多架构构建并推送 ACR
|
name: 多架构构建并推送 ACR
|
||||||
needs: test
|
needs: test
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
timeout-minutes: 60
|
# dind 自带独立 daemon:不依赖 runner 宿主机 docker.sock 转发配置
|
||||||
|
container:
|
||||||
|
image: docker:27-dind
|
||||||
|
options: --privileged
|
||||||
|
env:
|
||||||
|
DOCKER_HOST: unix:///var/run/docker.sock
|
||||||
|
DOCKER_TLS_CERTDIR: ""
|
||||||
|
timeout-minutes: 120
|
||||||
steps:
|
steps:
|
||||||
- name: 安装工具并检出
|
- name: 启动 dind daemon 并检出
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||||
apk add --no-cache git curl bash >/dev/null
|
apk add --no-cache git bash >/dev/null
|
||||||
|
dockerd --host=unix:///var/run/docker.sock >/tmp/dockerd.log 2>&1 &
|
||||||
|
for i in $(seq 1 30); do docker info >/dev/null 2>&1 && break; sleep 1; done
|
||||||
|
docker info --format 'dind 就绪: {{.ServerVersion}}'
|
||||||
SCHEME="${GITHUB_SERVER_URL%%://*}"
|
SCHEME="${GITHUB_SERVER_URL%%://*}"
|
||||||
SRV="${GITHUB_SERVER_URL#*://}"
|
SRV="${GITHUB_SERVER_URL#*://}"
|
||||||
echo "clone from ${SCHEME}://${SRV}"
|
|
||||||
git clone --depth=1 --branch "$GITHUB_REF_NAME" \
|
git clone --depth=1 --branch "$GITHUB_REF_NAME" \
|
||||||
"${SCHEME}://oauth2:${GITHUB_TOKEN}@${SRV}/${GITHUB_REPOSITORY}.git" .
|
"${SCHEME}://oauth2:${GITHUB_TOKEN}@${SRV}/${GITHUB_REPOSITORY}.git" .
|
||||||
# 嵌入产物同步(保证二进制内前端与仓库一致)
|
|
||||||
if [ -f web-embed/index.html ]; then :; fi
|
|
||||||
|
|
||||||
- name: 安装 Docker CLI(挂宿主 daemon)
|
- name: 安装 QEMU binfmt(跨架构)
|
||||||
run: apk add --no-cache docker-cli buildx >/dev/null
|
run: |
|
||||||
|
docker run --rm --privileged tonistiigi/binfmt:latest --install all 2>/dev/null \
|
||||||
|
|| docker run --rm --privileged docker.m.daocloud.io/tonistiigi/binfmt:latest --install all
|
||||||
|
|
||||||
- name: 计算 tag(以 APP_VERSION 为唯一版本源)
|
- name: 计算 tag(以 APP_VERSION 为唯一版本源)
|
||||||
id: meta
|
id: meta
|
||||||
@@ -77,6 +86,7 @@ jobs:
|
|||||||
TAG_VER="${TAG_VER#v}"
|
TAG_VER="${TAG_VER#v}"
|
||||||
[ "$TAG_VER" = "$VER" ] || { echo "tag($TAG_VER) != APP_VERSION($VER),拒绝发布" >&2; exit 1; }
|
[ "$TAG_VER" = "$VER" ] || { echo "tag($TAG_VER) != APP_VERSION($VER),拒绝发布" >&2; exit 1; }
|
||||||
fi
|
fi
|
||||||
|
echo "version=$VER" >> "$GITHUB_OUTPUT"
|
||||||
echo "tags=${IMAGE}:${VER} ${IMAGE}:latest" >> "$GITHUB_OUTPUT"
|
echo "tags=${IMAGE}:${VER} ${IMAGE}:latest" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
- name: 登录阿里云 ACR
|
- name: 登录阿里云 ACR
|
||||||
@@ -84,20 +94,18 @@ jobs:
|
|||||||
ACR_USER: ${{ secrets.ACR_USERNAME }}
|
ACR_USER: ${{ secrets.ACR_USERNAME }}
|
||||||
ACR_PASS: ${{ secrets.ACR_PASSWORD }}
|
ACR_PASS: ${{ secrets.ACR_PASSWORD }}
|
||||||
run: |
|
run: |
|
||||||
PASS_LEN=${#ACR_PASS}
|
echo "ACR 用户: $ACR_USER (密码 ${#ACR_PASS} 位)"
|
||||||
echo "ACR 用户: $ACR_USER (密码 ${PASS_LEN} 位)"
|
|
||||||
printf '%s' "$ACR_PASS" | docker login "$REGISTRY" -u "$ACR_USER" --password-stdin
|
printf '%s' "$ACR_PASS" | docker login "$REGISTRY" -u "$ACR_USER" --password-stdin
|
||||||
|
|
||||||
- name: 多架构构建并推送
|
- name: buildx 多架构构建并推送
|
||||||
env:
|
env:
|
||||||
TAGS: ${{ steps.meta.outputs.tags }}
|
TAGS: ${{ steps.meta.outputs.tags }}
|
||||||
# provenance/sbom 必须关:阿里云 ACR 不识别 OCI empty manifest(attestation),
|
|
||||||
# 否则报 "denied: unknown manifest class for application/vnd.oci.empty.v1+json"
|
|
||||||
run: |
|
run: |
|
||||||
|
docker buildx create --name ci --driver docker-container --use 2>/dev/null || docker buildx use ci
|
||||||
ARGS=""
|
ARGS=""
|
||||||
for t in $TAGS; do ARGS="$ARGS -t $t"; done
|
for t in $TAGS; do ARGS="$ARGS -t $t"; done
|
||||||
|
# provenance/sbom 必须关:阿里云 ACR 不识别 OCI empty manifest(attestation)
|
||||||
docker buildx build \
|
docker buildx build \
|
||||||
--builder default \
|
|
||||||
--platform linux/amd64,linux/arm64 \
|
--platform linux/amd64,linux/arm64 \
|
||||||
--provenance=false --sbom=false \
|
--provenance=false --sbom=false \
|
||||||
--push \
|
--push \
|
||||||
|
|||||||
Reference in New Issue
Block a user