# ===================================================================== # ITMS CI/CD 블록 — scripts/deploy/deploy_server.py 의 _deploy(self, repo) 에 # 기존 elif 체인 말미에 그대로 붙여넣는다. (기존 블록은 변경하지 않는다.) # # 특수성: ITMS 는 Gradle 멀티모듈(Boot 2.6.2·Java17) 4포트 WAR 스택. # - Tier1(빌드 자동화): common 선행 → 5모듈 bootWar → 커밋별 아카이브. DB 불필요. # - Tier2(기동): 런타임 DB(MariaDB/Oracle)·기관 시크릿·JDK17 확보 환경에서만 # 아래 (restart ...) 단계 주석을 해제하여 systemd 재기동. 기본은 빌드+아카이브까지. # # 선결: 배포 서버에 JDK17 설치(예: /usr/lib/jvm/java-17-openjdk-amd64) 후 JAVA17 경로 지정. # 자격증명: Gitea 클론 URL 의 사용자/토큰은 서버 환경변수로 주입한다(하드코딩 금지). # 예) 서버 deploy_server 환경에 GITEA_CLONE_CRED='user:token' 를 두고 아래 f-string 에서 사용. # ===================================================================== elif repo == "itms": SRC = "/opt/itms/repo" ARTIF = "/opt/itms/artifacts" JAVA17 = "/usr/lib/jvm/java-17-openjdk-amd64" # 배포 대상 환경의 JDK17 경로로 수정 # GITEA_CLONE_CRED 는 서버 env 에서 주입(예: 'ythong:'). 코드/커밋에 비번 금지. CRED = os.environ.get("GITEA_CLONE_CRED", "") # 미설정 시 기존 리모트/캐시 사용 CLONE = (f"git clone 'http://{CRED}@127.0.0.1:9003/ythong/itms.git' {SRC}" if CRED else f"echo 'GITEA_CLONE_CRED 미설정 — 기존 {SRC} 사용' ") ok = run_steps(repo, [ ("git pull", ["bash", "-c", f"[ -d {SRC}/.git ] && git -C {SRC} fetch origin main && git -C {SRC} reset --hard origin/main" f" || ( mkdir -p /opt/itms && {CLONE} )"]), # common 선행 + 5모듈 bootWar (JDK17 지정). legacy/nlib 제외. ("gradle build", ["bash", "-c", f"cd {SRC} && JAVA_HOME={JAVA17} ./gradlew --no-daemon " f":common:build :auth:bootWar :api:bootWar :front:bootWar :batch:bootWar :datatrans:bootWar " f"-x test"]), # 커밋 해시별 산출물 아카이브(롤백 대비) ("archive war", ["bash", "-c", f"H=$(git -C {SRC} rev-parse --short HEAD); D={ARTIF}/$H; mkdir -p $D; " f"for m in auth api front batch datatrans; do " f"cp {SRC}/$m/build/libs/*.war $D/itms-$m.war 2>/dev/null || true; done; " f"ln -sfn $D {ARTIF}/current; ls -l {ARTIF}/current"]), # --- Tier2 (기동): DB/시크릿/JDK17 확보 환경에서만 주석 해제 --- # ("restart auth", ["bash","-c","systemctl restart itms-auth 2>/dev/null || true"]), # ("restart api", ["bash","-c","systemctl restart itms-api 2>/dev/null || true"]), # ("restart front", ["bash","-c","systemctl restart itms-front 2>/dev/null || true"]), # ("restart batch", ["bash","-c","systemctl restart itms-batch 2>/dev/null || true"]), # ("restart datatrans", ["bash","-c","systemctl restart itms-datatrans 2>/dev/null || true"]), # ("health check", ["bash","-c","sleep 6 && for p in 11000 11010 11020; do " # "curl -sf -o /dev/null http://127.0.0.1:$p/ && echo \"$p UP\" || echo \"$p DOWN\"; done"]), ]) if ok: notify_itsm(True, "✅ itms 빌드/아카이브 완료 (Tier1)") else: notify_itsm(False, "❌ itms 빌드 실패")