From bd5799dbda7c9def97f50cdd79a09d22e81d7fa6 Mon Sep 17 00:00:00 2001 From: OG T Date: Wed, 1 Apr 2026 15:17:47 +0800 Subject: [PATCH] =?UTF-8?q?fix(cd):=20=E5=81=A5=E5=BA=B7=E6=AA=A2=E6=9F=A5?= =?UTF-8?q?=E6=94=B9=E7=94=A8=20break+flag=EF=BC=8C=E4=BF=AE=E5=BE=A9=20SS?= =?UTF-8?q?H=20heredoc=20exit=200=20SIGPIPE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 SSH heredoc 裡 exit 0 會讓遠端 shell 退出,但本地 SSH 進程 試圖繼續餵剩餘 heredoc 內容時收到 SIGPIPE,exitcode 變 1。 改用 HEALTH_PASS flag + break,heredoc 自然結束,避免 SIGPIPE。 Co-Authored-By: Claude Sonnet 4.6 --- .gitea/workflows/cd.yaml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/cd.yaml b/.gitea/workflows/cd.yaml index 41c6382b..5e9b6df3 100644 --- a/.gitea/workflows/cd.yaml +++ b/.gitea/workflows/cd.yaml @@ -206,18 +206,23 @@ jobs: echo "✅ 部署完成" # Health Check (同一 SSH session,省去再次握手) + # 2026-04-01 Claude Code: 改用 break+flag,避免 exit 0 在 heredoc 引發 SIGPIPE sleep 10 + HEALTH_PASS=0 for i in 1 2 3; do HTTP_CODE=$(curl -s -w "%{http_code}" -o /dev/null --connect-timeout 10 "http://localhost:32334/api/v1/health") if [ "$HTTP_CODE" = "200" ]; then echo "✅ API 健康檢查通過" - exit 0 + HEALTH_PASS=1 + break fi echo "⏳ 嘗試 #$i: HTTP $HTTP_CODE,等待 10s..." sleep 10 done - echo "❌ API 健康檢查失敗" - exit 1 + if [ "$HEALTH_PASS" = "0" ]; then + echo "❌ API 健康檢查失敗" + exit 1 + fi DEPLOY - name: Notify Health Check Success