fix: 簡化 Tailscale SSH 流程,改善 Docker Build 錯誤處理

This commit is contained in:
Your Name 2026-01-21 18:44:52 +08:00
parent ddbc92196f
commit a4d5cd1e53

View file

@ -108,71 +108,22 @@ jobs:
echo "========================================" echo "========================================"
# ======================================== # ========================================
# Step 4: 測試 Tailscale SSH 連線(非互動式) # Step 4: Tailscale SSH 連線(支援互動式驗證)
# 說明:使用 tailscale ssh 測試連線,確保不需要人工登入 # 說明:使用 tailscale ssh 連線,若需要網頁驗證會等待用戶完成
# 重要:需要在 Tailscale ACL 中設定 SSH policy
# ======================================== # ========================================
- name: 🔐 測試 Tailscale SSH 連線(非互動式) - name: 🔐 測試 Tailscale SSH 連線
run: | run: |
echo "========================================" echo "========================================"
echo "🔐 測試 Tailscale SSH 連線(非互動式)" echo "🔐 測試 Tailscale SSH 連線"
echo "========================================" echo "========================================"
echo "使用者: ${{ secrets.SSH_USER }}" echo "使用者: ${{ secrets.SSH_USER }}"
echo "主機: ${{ secrets.SSH_HOST }}" echo "主機: ${{ secrets.SSH_HOST }}"
echo "" echo ""
# 設定超時時間,避免卡住 # Tailscale SSH 可能需要額外驗證,這是正常的安全流程
echo "⏳ 嘗試 SSH 連線(超時 30 秒)..." # 執行 SSH 連線,輸出會包含驗證連結(如果需要的話)
tailscale ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} \
# tailscale ssh 不支援 -o 選項,直接使用 "echo '✅ Tailscale SSH 連線成功!' && echo '主機名稱:' && hostname && echo '當前使用者:' && whoami"
# 使用 timeout 命令確保不會卡住
RESULT=$(timeout 30 tailscale ssh ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} \
"echo '✅ Tailscale SSH 連線成功!' && echo '主機名稱:' && hostname && echo '當前使用者:' && whoami" 2>&1) || true
echo "${RESULT}"
# 檢查是否成功
if echo "${RESULT}" | grep -q "Tailscale SSH 連線成功"; then
echo ""
echo "✅ SSH 非互動式測試成功!"
elif echo "${RESULT}" | grep -qi "authenticate\|login.tailscale.com\|additional check"; then
echo ""
echo "========================================"
echo "❌ 錯誤Tailscale SSH 需要設定 ACL Policy"
echo "========================================"
echo ""
echo "🔧 這不是 Auth Key 的問題,而是 Tailscale SSH ACL 設定問題"
echo ""
echo "📋 請在 Tailscale Admin Console 中設定 SSH Policy"
echo ""
echo " 1. 前往 https://login.tailscale.com/admin/acls"
echo ""
echo " 2. 在 ACL 中加入以下 SSH policy放在 acls 之後):"
echo ""
echo ' "ssh": ['
echo ' {'
echo ' "action": "accept",'
echo ' "src": ["autogroup:member"],'
echo ' "dst": ["tag:ci-target"],'
echo ' "users": ["autogroup:nonroot"]'
echo ' }'
echo ' ]'
echo ""
echo " 3. 在遠端主機上執行:"
echo " sudo tailscale up --ssh --advertise-tags=tag:ci-target"
echo ""
echo " 4. 確保 Auth Key 有 tag:ci-target 的權限"
echo ""
echo "========================================"
echo "🔄 或者:使用傳統 SSH over Tailscale 網路(備選方案)"
echo "========================================"
exit 1
else
echo ""
echo "⚠️ 連線失敗,錯誤訊息:"
echo "${RESULT}"
exit 1
fi
echo "" echo ""
echo "========================================" echo "========================================"
@ -369,12 +320,34 @@ jobs:
docker buildx use "${BUILDER_NAME}" docker buildx use "${BUILDER_NAME}"
# Multi-arch build + push # Multi-arch build + push
docker buildx build \ # 使用 --progress=plain 顯示完整 log
# 若失敗會顯示詳細錯誤資訊
if ! docker buildx build \
--platform linux/amd64,linux/arm64 \ --platform linux/amd64,linux/arm64 \
-t "${IMAGE}" \ -t "${IMAGE}" \
--push \ --push \
--progress=plain \ --progress=plain \
. . 2>&1; then
echo ""
echo "========================================"
echo "❌ Docker Build 失敗!"
echo "========================================"
echo ""
echo "🔧 常見問題與解決方案:"
echo ""
echo "1⃣ apt-get 安裝失敗arm64 QEMU 問題)"
echo " → 建議:拆分 apt-get install 為多段 RUN"
echo " → 或:對 arm64 跳過不穩定套件"
echo ""
echo "2⃣ 網路問題"
echo " → 建議:加入 apt-get update --fix-missing"
echo ""
echo "3⃣ 記憶體不足"
echo " → 建議:增加 Docker 記憶體限制"
echo ""
exit 1
fi
echo "" echo ""
echo "✅ Multi-Arch Docker build & push 完成!" echo "✅ Multi-Arch Docker build & push 完成!"