From 85ec0d277ee911b89fd49d093b203fdb4da90bda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=EC=9E=AC=EC=A4=91?= <126754298+m-a-king@users.noreply.github.com> Date: Thu, 13 Aug 2026 20:39:01 +0900 Subject: [PATCH 1/2] =?UTF-8?q?infra:=20=EC=A0=95=EC=83=81=20=EB=B0=B0?= =?UTF-8?q?=ED=8F=AC=EB=A7=88=EB=8B=A4=20=EB=82=A8=EB=8D=98=20=EC=9A=94?= =?UTF-8?q?=EC=95=BD=20=EC=8A=A4=ED=85=9D=20=EC=8B=A4=ED=8C=A8=20=EC=A2=85?= =?UTF-8?q?=EB=A3=8C=EC=BD=94=EB=93=9C=EB=A5=BC=20=EC=97=86=EC=95=A4?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Write deployment summary 의 마지막 줄이 "[ -n "$GUARD_REASON" ] && echo" 라, 가드 미발동(정상 배포)이면 조건 거짓의 종료코드 1 이 그대로 스텝 종료코드가 됐다. continue-on-error 덕에 job 은 success 였지만 run 페이지 Annotations 와 스텝 로그 끝에 빨간 실패가 매번 남았다 - 2026-08-13 prod promote(job 94356528421)와 직전 dev 배포(job 94318572726) 양쪽에서 동일 annotation 을 확인했다. 배포 로그를 읽을 때 진짜 실패와 구분되지 않아 실제로 오독을 유발했다 - "|| true" 로 종료코드를 덮는 대신 if 문으로 바꿔, 조건 거짓이 애초에 종료코드가 되지 않게 했다. 가드가 실제 발동한 배포에서는 중단 사유 행이 그대로 출력된다 - 같은 단축평가가 블록 마지막에 오는 다른 지점을 워크플로 전체에서 재조사했다. certbot SSL 파일 복사 지점은 복사가 실제로 실패했을 때만 종료코드가 새는 다른 성격이라 그대로 뒀다 --- .github/workflows/deploy.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index fd4939fb..a697f48e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -687,7 +687,9 @@ jobs: echo "| Docker 푸시 | ${{ steps.docker_push.outcome }} |" echo "| EC2 배포 | ${{ steps.deploy.outcome }} |" echo "| 헬스체크 & 전환 | ${{ steps.health.outcome }} |" - [ -n "$GUARD_REASON" ] && echo "| 중단 사유 | $GUARD_REASON |" + # 조건이 블록의 마지막 명령이므로 if 로 쓴다. "[ ... ] && echo" 형태면 가드 미발동(정상 배포)일 때 + # 조건 거짓의 종료코드 1 이 스텝 종료코드가 되어, 성공한 배포마다 빨간 annotation 이 남는다. + if [ -n "$GUARD_REASON" ]; then echo "| 중단 사유 | $GUARD_REASON |"; fi } >> "$GITHUB_STEP_SUMMARY" - name: Notify Discord on success From bf21629f3a9017d7047496069fccf446276a9337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=EC=9E=AC=EC=A4=91?= <126754298+m-a-king@users.noreply.github.com> Date: Fri, 14 Aug 2026 15:02:20 +0900 Subject: [PATCH 2/2] =?UTF-8?q?infra:=20=EB=B0=B0=ED=8F=AC=20=EC=9A=94?= =?UTF-8?q?=EC=95=BD=20=ED=91=9C=EC=97=90=EC=84=9C=20=EC=A4=91=EB=B3=B5?= =?UTF-8?q?=EB=90=9C=20=EC=A4=91=EB=8B=A8=20=EC=82=AC=EC=9C=A0=20=ED=96=89?= =?UTF-8?q?=EC=9D=84=20=EC=A0=9C=EA=B1=B0=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 앞 커밋은 조건 출력을 if 로 감싸 종료코드만 정상화했다. 그 뒤 "그 행이 굳이 필요한가" 를 되짚어 보니, 살릴 값이 아니라 지울 값이었다 - 가드가 발동하면 사유는 이미 세 곳에 나온다. guard 스텝이 발행하는 ::error:: annotation(실제 IP 와 도메인 포함), 같은 스텝의 environment/domainIP/targetIP 로그, Discord 실패 알림의 CAUSE(같은 reason output 을 fallback 문구까지 갖춰 소비). 여기에 요약 표 STATUS 칸의 "중단 (환경-호스트 불일치 가드)" 까지 더하면 표의 중단 사유 행은 네 번째 표기였다 - 중복 표기 하나를 살리려고 방어 코드를 두는 대신 행을 지워, 종료코드가 샐 자리 자체를 없앴다. 앞 커밋에서 넣은 if 문과 주석도 함께 사라진다 - steps.guard.outputs.reason 은 Discord 실패 알림이 계속 소비하므로 output 자체는 그대로 둔다 --- .github/workflows/deploy.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a697f48e..2677a548 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -673,8 +673,9 @@ jobs: else STATUS="⚠️ 알 수 없음" fi - GUARD_REASON="${{ steps.guard.outputs.reason }}" + # 가드 발동 사유(steps.guard.outputs.reason)는 이 표에 싣지 않는다. 같은 run 페이지의 + # ::error:: annotation·guard 스텝 로그·Discord 실패 알림이 이미 같은 내용을 더 눈에 띄게 전한다. { echo "## 배포 결과: $STATUS" echo "" @@ -687,9 +688,6 @@ jobs: echo "| Docker 푸시 | ${{ steps.docker_push.outcome }} |" echo "| EC2 배포 | ${{ steps.deploy.outcome }} |" echo "| 헬스체크 & 전환 | ${{ steps.health.outcome }} |" - # 조건이 블록의 마지막 명령이므로 if 로 쓴다. "[ ... ] && echo" 형태면 가드 미발동(정상 배포)일 때 - # 조건 거짓의 종료코드 1 이 스텝 종료코드가 되어, 성공한 배포마다 빨간 annotation 이 남는다. - if [ -n "$GUARD_REASON" ]; then echo "| 중단 사유 | $GUARD_REASON |"; fi } >> "$GITHUB_STEP_SUMMARY" - name: Notify Discord on success