From 199ffb56d91b0d79668df8cec58964b48f75e5b6 Mon Sep 17 00:00:00 2001 From: chpark Date: Sat, 30 May 2026 14:44:46 +0900 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20SSH=20=EB=B9=84=EB=B0=80?= =?UTF-8?q?=EB=B2=88=ED=98=B8=EB=A5=BC=20Gitea=20Secret=20=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B6=84=EB=A6=AC=20+=20=ED=97=AC=EC=8A=A4?= =?UTF-8?q?=EC=B2=B4=ED=81=AC=20=EA=B2=AC=EA=B3=A0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 코드 내 평문 SSH 비밀번호 제거 → secrets.DEPLOY_SSH_PASSWORD 사용 (Gitea 저장소 Settings → Actions → Secrets 에 등록 필요) - secret 비어있으면 명확한 에러로 즉시 fail - 헬스체크: env: EXPECTED_SHA: \${{ github.sha }} 명시 주입 + 폴링 18회로 확장 + 컨테이너/traefik 안정화 첫 sleep 10s (act_runner 일부 환경에서 \$GITHUB_SHA 비어있어 비교 깨지던 케이스 대응) 본 deploy 단계는 #272 에서 실증 성공 — 헬스체크 단계의 실패 표시만 정상화. Co-Authored-By: Claude Opus 4.7 --- .gitea/workflows/deploy.yml | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index c16c622..c611f26 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -15,9 +15,17 @@ jobs: sudo apt-get update -qq && sudo apt-get install -y -qq sshpass openssh-client - name: Deploy via SSH (password auth) + env: + # Gitea: Settings → Actions → Secrets 에 DEPLOY_SSH_PASSWORD 등록 + # (코드 평문 노출 차단 — 같은 호스트 비밀번호는 secret 으로 보관) + SSHPASS: ${{ secrets.DEPLOY_SSH_PASSWORD }} run: | set -e # 배포 단계 실패하면 즉시 워크플로우 fail (헬스체크에 의존하지 않음) - export SSHPASS='1313Qkrckd!!!!!!' + if [ -z "$SSHPASS" ]; then + echo "::error::DEPLOY_SSH_PASSWORD secret 이 비어있음 — Gitea Settings → Actions → Secrets 에 등록 필요" + exit 1 + fi + export SSHPASS mkdir -p ~/.ssh ssh-keyscan -H 121.156.99.3 >> ~/.ssh/known_hosts 2>/dev/null || true @@ -88,17 +96,23 @@ jobs: REMOTE_SCRIPT - name: Healthcheck (build-sha.txt 일치 검증) + env: + # ${GITHUB_SHA} 가 act_runner 환경에서 비어있는 경우가 있어 + # github.sha 표현식으로 명시 주입 (push 커밋 SHA) + EXPECTED_SHA: ${{ github.sha }} run: | - EXPECTED="${GITHUB_SHA}" + EXPECTED="${EXPECTED_SHA}" echo "▶ 기대 SHA: $EXPECTED" - for i in 1 2 3 4 5 6 7 8 9 10 11 12; do - sleep 10 - REMOTE=$(curl -sS -m 5 -L "https://momotogether.com/build-sha.txt?_=$(date +%s)" 2>/dev/null | tr -d '[:space:]' || true) - echo " ${i}/12: 운영 SHA=${REMOTE:-(없음)}" + # 컨테이너 부팅 + traefik 라우터 캐시 재로드 안정화 — 첫 시도 전 여유 + sleep 10 + for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do + REMOTE=$(curl -ksS -m 5 -L "https://momotogether.com/build-sha.txt?_=$(date +%s)" 2>/dev/null | tr -d '[:space:]' || true) + echo " ${i}/18: 운영 SHA=${REMOTE:-(없음)}" if [ -n "$REMOTE" ] && [ "$REMOTE" = "$EXPECTED" ]; then echo "::notice::✔ 운영에 신버전(${REMOTE:0:8}) 반영 확인" exit 0 fi + sleep 10 done - echo "::error::헬스체크 실패: 운영의 build-sha (${REMOTE:-없음})가 기대 SHA(${EXPECTED:0:8})와 다름 — 빌드/재시작 실패 가능" + echo "::error::헬스체크 실패: 운영의 build-sha (${REMOTE:-없음})가 기대 SHA(${EXPECTED:-비어있음})와 다름 — 빌드/재시작 실패 또는 SHA 환경변수 미주입" exit 1