zioinfo.co.kr 피저빌리티 게이트 결과 ITMS 실기동(Tier2)은 이 환경 불가
(런타임 DB MariaDB/Oracle 도달 불가 + JDK17 부재 + Boot2.6.2 Java21 미지원)
→ 서버 미변경, 배포 대상 환경에서 적용할 준비된 산출물만 생성.
- deploy/deploy_server_itms_block.py: deploy_server.py 에 붙일 itms 블록
(Tier1 빌드+커밋별 아카이브; Tier2 재기동은 주석 처리, 기존 블록 불변, 자격증명 env 주입)
- deploy/build.sh: common 선행 → 5모듈 bootWar (JDK17)
- deploy/systemd/itms-{auth,api,front,batch,datatrans}.service: 4포트 WAR+데몬 유닛 템플릿
- deploy/env/itms.env.example: SPRING_PROFILES_ACTIVE 등 (실 시크릿 미포함)
- deploy/gitea-webhook.md: webhook 3대 함정(url·secret·ALLOWED_HOST_LIST) 반영 생성 가이드(미실행)
- deploy/README.md: 특수성·적용 절차·피저빌리티 근거
보안: AES 암호문·DB 접속정보·NCP 키·Gitea 비번 하드코딩 0(env 주입). 기존 단일-jar 배포 무영향.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
51 lines
3.7 KiB
Python
51 lines
3.7 KiB
Python
# =====================================================================
|
|
# 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:<token>'). 코드/커밋에 비번 금지.
|
|
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 빌드 실패")
|