From 20897de44221e04fe25fa1893cff53545f1e7362 Mon Sep 17 00:00:00 2001 From: shanshanzhong Date: Wed, 22 Oct 2025 07:09:12 -0700 Subject: [PATCH] =?UTF-8?q?ci(docker):=20=E4=BC=98=E5=8C=96=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E5=B7=A5=E5=85=B7=E5=AE=89=E8=A3=85=E6=AD=A5=E9=AA=A4?= =?UTF-8?q?=E5=B9=B6=E6=B7=BB=E5=8A=A0=E9=94=81=E7=AD=89=E5=BE=85=E6=9C=BA?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加对 apt/dpkg 锁的等待机制以避免并发安装冲突 移除不再需要的 Node.js 安装步骤 --- .gitea/workflows/docker.yml | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/.gitea/workflows/docker.yml b/.gitea/workflows/docker.yml index 52e150b..4f2168a 100644 --- a/.gitea/workflows/docker.yml +++ b/.gitea/workflows/docker.yml @@ -66,16 +66,39 @@ jobs: fi # 步骤3: 安装系统工具 (Docker, curl, jq) - - name: 🔧 安装 Node.js 并验证工具 + - name: 🔧 安装系统工具 (Docker, curl, jq) run: | - echo "安装 Node.js..." - apk add --no-cache nodejs npm - echo "验证预装工具版本..." + set -e + export DEBIAN_FRONTEND=noninteractive + echo "等待 apt/dpkg 锁释放 (unattended-upgrades)..." + # 等待最多 300 秒让 unattended-upgrades/apt/dpkg 锁释放 + end=$((SECONDS+300)) + while true; do + LOCKS_BUSY=0 + # 如果 unattended-upgrades 正在运行,标记为忙碌 + if pgrep -x unattended-upgrades >/dev/null 2>&1; then LOCKS_BUSY=1; fi + # 如果 fuser 存在,检查常见的锁文件 + if command -v fuser >/dev/null 2>&1; then + if fuser /var/lib/dpkg/lock >/dev/null 2>&1 \ + || fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1 \ + || fuser /var/lib/apt/lists/lock >/dev/null 2>&1; then + LOCKS_BUSY=1 + fi + fi + # 如果不忙碌则跳出循环 + if [ "$LOCKS_BUSY" -eq 0 ]; then break; fi + # 超时后约 5 分钟 + if [ $SECONDS -ge $end ]; then + echo "等待 apt/dpkg 锁超时,使用 Dpkg::Lock::Timeout 继续..." + break + fi + echo "仍在等待锁释放..."; sleep 5 + done + apt-get update -y -o Dpkg::Lock::Timeout=600 + apt-get install -y -o Dpkg::Lock::Timeout=600 jq curl ca-certificates docker.io docker --version jq --version curl --version - node --version - npm --version # 步骤4: 构建并发布到镜像仓库 - name: 📤 构建并发布到镜像仓库