fix: 簡化 Tailscale SSH 流程,改善 Docker Build 錯誤處理
This commit is contained in:
parent
ddbc92196f
commit
a4d5cd1e53
1 changed files with 39 additions and 66 deletions
91
.github/workflows/docker-build-remote.yml
vendored
91
.github/workflows/docker-build-remote.yml
vendored
|
|
@ -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 完成!"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue