- docs/CICD_PIPELINE.md 정본(LIVE) + deploy/README.md 가동중 갱신 - deploy/apk/: publish_app_manifest.sh·mobile-app.html(WISE QR)·itms-latest.json - deploy/nginx: /mobile-app(ITMS 전용)+/downloads/(APK)+매니페스트 서빙 반영 - mobile: EAS 빌드 의존 승격(react-navigation/expo-modules-core/metro)·.easignore·eas appVersionSource Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
5.4 KiB
5.4 KiB
ITMS CI/CD 파이프라인 정본 (LIVE)
최종 갱신: 2026-07-19 | 상태: 가동 중 (2026-07-17 "산출물 준비형" 판정을 대체) 상세 실행 기록:
C:\GUARDiA\_workspace\itms_cicd\01~06_*.md(설계·구축·스키마·모바일·SR·QA)
1. 한 줄 요약
git push 한 번이면 개발서버 빌드·배포 → 헬스체크 → 운영서버 자동 승격 → QR 페이지까지 자동 처리된다.
git push (Gitea ythong/itms, main)
→ Gitea webhook → deploy_server.py itms 블록 (개발서버 101.79.17.164:9999)
→ gradle 모듈 빌드 (common 선행 → auth/api/front/batch/datatrans bootWar, JDK17)
→ 산출물 아카이브 (/opt/itms/artifacts/current)
→ dev 재기동: itms-front + itms-auth + itms-api (systemd)
→ dev 헬스체크 게이트 ← 실패 시 여기서 중단 (운영 오염 방지)
→ prod 승격: front WAR tar-over-ssh (ssh -p 9271, jenkins 배포키)
→ prod 재기동 + 헬스체크 → 완료
2. 서버·도메인
| 구분 | 서버 | 도메인 | 기동 범위 | TLS |
|---|---|---|---|---|
| 개발 | 101.79.17.164 | https://itms.zioinfo.co.kr | front(11020)+auth(11000)+api(11010) — 실로그인 동작 | Let's Encrypt(자동갱신) |
| 운영 | 211.37.173.197 (wise.ai.kr, ssh :9271) | https://itms.wise.ai.kr | front-only (RAM 게이트) | Let's Encrypt(자동갱신) |
- 운영서버 211.37.173.197 ITMS 배포는 2026-07-19 소유자 지정·승인 (CAMP와 동일 서버, Host 헤더 기반 vhost — bare IP 접근은 404).
- 운영 RAM 게이트: prod 총 2GB·가용 ~500MB → front 단일 JVM(-Xmx320m)만. auth/api/DB 운영 기동은 RAM 증설 후 (그 전 강행 금지 — 기존 WISE/CAMP 운영 서비스 보호).
3. 개발서버 런타임 (Stage B — 로그인 실동작)
- MariaDB 10.11 +
ur_itms_db(전용 계정itms_zio) + swap 2G - 스키마: 고객 DDL 부재 → MyBatis 매퍼 역설계 22테이블 (
_workspace/itms_cicd/03_schema_min.sql)- 함정1: auth는
JdbcTokenStore→oauth_access_token/oauth_refresh_token/oauth_approvals3테이블 없으면 로그인 자체 실패 - 함정2: 로그인 쿼리 =
COMVNUSERMASTER ⋈ TB_USER_CRYP_CNFINNER JOIN → 두 테이블에 동일ESNTL_ID시드 필수
- 함정1: auth는
- 프로파일: 기존 16기관 yml 불변. 신규
zio프로파일은 서버 외부 config(/opt/itms/config/application-zio.yml,-Dspring.config.additional-location) — 재빌드 불필요 - 시크릿:
/opt/itms/secrets/(0600) — 데모 admin 비번·DB 비번. 문서/커밋 기재 금지 - nginx Bearer 분기(핵심 함정): front와 api가 동일 URL prefix(/main·/srm·/sys 등)를 화면/REST로 각각 사용 → 경로 분기 불가.
Authorization: Bearer헤더 map으로 분기: Bearer→api(11010), 세션(브라우저)→front(11020),/oauth/→auth(11000). 정본:deploy/nginx/itms.zioinfo.co.kr.conf
4. 모바일 앱 · QR 배포
- 앱:
mobile/독립 Expo 앱(SDK 51, TS, 12화면) — Gradle 컴포짓 무관 순수 Node - 인증: OAuth2 password grant
POST /oauth/token(+Basic client,ssoYn=N) → RS256 JWT 24h - 업무 API: 루트 prefix
POST /*.do+ Bearer (/apiprefix 아님 —constants/Config.ts권위), 응답 봉투{data,status,totalCount,code,message} - QR 다운로드 페이지: dev·prod
/mobile-app— APK 매니페스트 기반 버전·QR·다운로드 표시 - APK: EAS 클라우드 빌드(EXPO_TOKEN 환경변수 — 값 저장 금지)
5. 고객 SR 반영 현황 (2026-07-19 push 53b8f42c)
- 원본:
docs/ITSM 고객 수정 요청 체크리스트_20260708.xlsx(25건) +docs/ITSM 기능개선 및 장애처리_V1.1_20260707.pptx(15건) + 브랜딩(F12) = 40건 - 완료 23건 (로그인 잠금/메시지, 서비스데스크 서버측 권한·검증, 용어 통일 172건, 임시저장 버튼, 로고/파비콘 관리 등) — 개발·운영 라이브 검증 완료
- 보류 17건: 고객 DB 스키마/프로시저 의존·설계 확정 필요·정책 판단 —
docs/SR_BACKLOG_20260708.md권고안 포함 - 조치 기록(고객 제출용):
docs/ITSM 고객 수정 요청 체크리스트_20260708_조치결과.xlsx— 쉬운 설명 + 변경 전/후 코드 나란히 비교 - 상세 diff:
docs/SR_CHANGES_20260719.md
6. 운영 절차 (Runbook)
| 작업 | 방법 |
|---|---|
| 배포 | git push origin main — 이후 전자동. push = 운영 배포이므로 로컬 빌드 게이트(전 모듈 bootWar EXIT 0) 통과 후에만 |
| 배포 추적 | dev journalctl -u zioinfo-deploy -f (webhook→build→restart→promote 로그) |
| 롤백 | dev: /opt/itms/artifacts/ 이전 아카이브 재기동 / prod: 이전 front WAR 재전송+재기동 |
| 헬스 | dev/prod 도메인 HTTP 200 + systemctl status itms-front itms-auth itms-api |
| deploy_server 수정 | 로컬 정본 scripts/deploy/deploy_server.py + 서버 /opt/zioinfo/deploy_server.py 양쪽 반영 + zioinfo-deploy 재시작 필수(미반영 시 웹훅 1ms no-op) |
7. 잔여 백로그
- APK 게시: EAS 빌드 완료 → dev/prod
/mobile-app매니페스트 갱신 (진행 중) - 운영 풀스택(로그인): RAM 증설 결정 대기
- DB 의존 SR 17건: 고객
ur_itms_db덤프 확보 시 (또는 역설계 확장) - batch(Oracle XE)·datatrans(기관 NAS): 기관 전용망 확보 시 — CI 빌드·아카이브는 이미 포함
- legacy/nlib: CI 제외 유지(Maven·Java8)