kintex/deploy/deploy_server_kintex_block.py
zio 63386b62aa fix(devops): 백엔드 미배포 근본수정 — deploy_kintex.sh 단일 빌드 진실원 + SIGPIPE 검증 버그
증상: push 후 프론트만 배포, 백엔드 jar 스테일(V6 고정, V7/V8 미적용).
근본원인 3종:
1) deploy_kintex.sh가 백엔드 빌드 안 함(복사만) → 이제 프론트+백엔드 직접 빌드(단일 진실원)
2) gradlew mode 100644(비실행) → git +x(100755) + sh ./gradlew(실행권한 불요)
3) jar 검증 'unzip -l | grep -q'가 set -o pipefail 하에서 grep 조기종료→unzip SIGPIPE(141)
   →메인클래스 발견에도 오탐 실패→die→jar 미복사. → grep -q 제거(전량 소비) + 선택 tail(파이프 조기종료 회피)

- deploy_server kintex 블록: npm/gradle/verify 개별단계 제거 → git pull → deploy_kintex.sh(빌드+배포) → health
- Jenkinsfile: 동일 스크립트 위임(경로 함정 회피, WORKSPACE 일치)
- 서버 /opt/zioinfo/deploy_server.py 반영·재시작 완료(백업)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 19:44:30 +09:00

38 lines
2.6 KiB
Python

# KINTEX 블록 — 서버 /opt/zioinfo/deploy_server.py 의 _deploy() 체인에 삽입되는 정본 사본.
# (deploy_server.py 는 루트 인프라 파일이므로 kintex 리포엔 이 참조 사본만 둔다. 서버 사본이 실행 권위.)
# 삽입 위치: 마지막 `elif repo == "uiws":` 블록 다음, `logging.info(f"=== {repo} 배포 완료 ===")` 앞.
# Gitea owner=zio, 기본 브랜치=main, 백엔드 포트 8021.
# ★빌드는 deploy_kintex.sh 단일 진실원(프론트 npm + 백엔드 sh ./gradlew bootJar). 블록은 git pull → deploy_kintex.sh → health.
'''
elif repo == "kintex":
# 분리형 배포: 프론트 dist(Vite) → /var/www/kintex, 백엔드 bootJar(Gradle) → /opt/kintex/app/app.jar,
# kintex.service + kintex-nanobanana.service(나노바나나 워커, GEMINI 키는 워커 env 전용) 재기동.
# Flyway baseline-on-migrate=true → 기동 시 스키마 자동 적용.
# ★빌드는 deploy_kintex.sh 가 단일 진실원으로 수행(프론트 npm + 백엔드 sh ./gradlew bootJar)
# → 검증(SIGPIPE-safe)→원자교체→jar 교체→재기동→헬스체크→실패 시 롤백. (2026-07-11 백엔드 미배포 버그 근본수정)
SRC = "/opt/kintex/src"
ok = run_steps(repo, [
("git pull", ["bash", "-c",
f"if [ -d {SRC}/.git ]; then "
f"git -C {SRC} fetch origin main && git -C {SRC} reset --hard origin/main; "
f"else "
f"[ -e {SRC} ] && mv {SRC} {SRC}.bak_$(date +%Y%m%d%H%M%S); "
f"git clone 'http://zio:1q2w3e%21Q@127.0.0.1:9003/zio/kintex.git' {SRC}; "
f"fi"]),
("build+deploy (deploy_kintex.sh)", ["bash", "-c",
f"sed -i 's/\\r$//' {SRC}/deploy/*.sh 2>/dev/null; "
f"bash {SRC}/deploy/deploy_kintex.sh {SRC}"]),
("health check", ["bash", "-c",
"for i in $(seq 1 20); do sleep 3; "
"code=$(curl -s -m 5 -o /dev/null -w '%{http_code}' http://127.0.0.1:8021/health); "
"if [ \"$code\" = '200' ]; then echo \"health OK ($code)\"; exit 0; fi; "
"done; echo 'health FAIL'; systemctl is-active kintex.service 2>/dev/null; exit 1"]),
])
if ok:
notify_itsm(True, "✅ kintex 배포 완료 (kintex.zioinfo.co.kr, 포트 8021)")
trigger_jenkins("kintex")
else:
notify_itsm(False, "❌ kintex 빌드/배포 실패")
'''