From 7f3c86c5880ddbb4b48f5c61e94f101da1258c14 Mon Sep 17 00:00:00 2001 From: infraurp Date: Wed, 26 Aug 2026 15:23:14 +0900 Subject: [PATCH] =?UTF-8?q?=ED=8C=8C=EC=9D=B4=ED=94=84=EB=9D=BC=EC=9D=B8:?= =?UTF-8?q?=20find=20|=20head=20-1=20=EC=9D=98=20SIGPIPE=20=EB=A1=9C=20?= =?UTF-8?q?=EB=B0=B0=ED=8F=AC=EA=B0=80=20=EB=A9=88=EC=B6=94=EB=8D=98=20?= =?UTF-8?q?=EA=B2=83=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit act 는 run: 스텝을 bash -e -o pipefail 로 실행한다. `find ... | head -1` 은 head 가 첫 줄을 받고 파이프를 닫는 순간 find 가 SIGPIPE(141)로 죽어 파이프라인 전체가 실패로 판정된다. 빌드가 BUILD SUCCESS 로 끝나고 192MB WAR 까지 만든 뒤 "산출물 검증" 스텝이 출력 한 줄 없이 죽어 배포가 멈췄다. 실측: bash -e -o pipefail 에서 `find | head -1` → 141, `-print -quit` → 0. - 산출물 검증: find 를 -print -quit 로 바꿔 파이프 자체를 없앤다 - 사전 점검: `free -h | head -2` 도 같은 경합을 안고 있어 파이프를 제거 리포 주석이 경고하던 바로 그 함정이다(deploy/dev 배포 스크립트의 unzip -l | grep -q 사고와 동일 원인). Co-Authored-By: Claude Opus 5 --- .gitea/workflows/deploy-wise.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/deploy-wise.yml b/.gitea/workflows/deploy-wise.yml index b632df5..59caa52 100644 --- a/.gitea/workflows/deploy-wise.yml +++ b/.gitea/workflows/deploy-wise.yml @@ -62,7 +62,8 @@ jobs: run: | set -e df -h /opt | tail -1 - free -h | head -2 + # `free -h | head -2` 도 같은 SIGPIPE 함정을 안고 있다(작아서 대개 통과하지만 경합이다). + free -h # 터널이 살아 있어야 배포 후 확인이 가능하다 systemctl is-active arko-was-tunnel || echo "::warning::터널이 죽어 있다 — 배포 후 확인이 실패할 수 있다" @@ -80,7 +81,11 @@ jobs: run: | set -e # 바이트코드 major=51(Java 7). JDK 11/17 로 잘못 빌드되면 WAS 에서 못 뜬다. - CLS=$(find target/classes -name '*.class' | head -1) + # `find ... | head -1` 로 쓰면 안 된다. head 가 첫 줄을 받고 파이프를 닫는 순간 + # find 가 SIGPIPE(141)로 죽고, act 가 스텝을 bash -e -o pipefail 로 돌리기 때문에 + # 파이프라인 전체가 실패로 판정된다 — 출력 한 줄 없이 배포가 멈춘다(2026-08-26 실제 발생). + # -print -quit 는 첫 매치를 찍고 스스로 끝내므로 파이프가 필요 없다. + CLS=$(find target/classes -name '*.class' -print -quit) VER=$(od -An -t d1 -j 7 -N 1 "$CLS" | tr -d ' ') echo "바이트코드 major=$VER (51이어야 정상)" [ "$VER" = "51" ] || { echo "::error::JDK 8 이 아닌 컴파일러로 빌드됐다"; exit 1; }