ci(docker): 优化系统工具安装步骤并添加锁等待机制
Some checks failed
Build docker and publish / build (20.15.1) (push) Failing after 21s

添加对 apt/dpkg 锁的等待机制以避免并发安装冲突
移除不再需要的 Node.js 安装步骤
This commit is contained in:
shanshanzhong 2025-10-22 07:09:12 -07:00
parent de792b03b9
commit 20897de442

View File

@ -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: 📤 构建并发布到镜像仓库