# GUARDiA ITSM 연동 가이드 > **버전**: 1.0.0 > **최종 수정**: 2026-05-25 --- ## 1. 연동 아키텍처 ``` GUARDiA Messenger │ !build ▼ GUARDiA ITSM API │ POST /api/vibe/{id}/build │ (Jenkins REST API 호출) ▼ Jenkins Server │ 파이프라인 실행 │ ├── Stage 1~7 실행 │ └── Stage 8: ITSM Callback │ POST /api/vibe/callback ▼ GUARDiA ITSM │ SR 상태 = COMPLETED │ ├── 고객 이메일 발송 └── 메신저 결과 통보 ``` --- ## 2. Jenkins → ITSM Callback API ### 2-1. 엔드포인트 ``` POST /api/vibe/callback Content-Type: application/json Authorization: Bearer ``` ### 2-2. 요청 바디 ```json { "session_id": "42", "sr_id": "SR-2026-001234", "status": "COMPLETED", "stage": "ITSM Callback", "message": "배포 완료 (빌드 #15)", "build_number": "15", "build_url": "http://jenkins.agency.go.kr:8080/job/my-app/15/", "deploy_env": "prd", "timestamp": "2026-05-25T14:30:00Z", "logs": { "build": "빌드 성공 (45초)", "test": "테스트 통과 (120/120)", "deploy": "배포 완료 → /opt/apps/my-app", "health_check": "HTTP 200 OK" } } ``` ### 2-3. 응답 ```json // 성공 { "ok": true, "sr_id": "SR-2026-001234", "sr_status": "COMPLETED", "notified": ["email", "messenger"] } // 실패 { "ok": false, "error": "세션을 찾을 수 없습니다." } ``` ### 2-4. 상태값 목록 | status | 설명 | SR 상태 변경 | |--------|------|------------| | `BUILDING` | 빌드 진행 중 | IN_PROGRESS | | `TESTING` | 테스트 진행 중 | IN_PROGRESS | | `DEPLOYING` | 배포 진행 중 | IN_PROGRESS | | `COMPLETED` | 배포 완료 | COMPLETED | | `FAILED` | 파이프라인 실패 | FAILED | | `UNSTABLE` | 테스트 불안정 | IN_PROGRESS | | `PENDING_APPROVAL` | 운영 배포 승인 대기 | PENDING | | `ROLLED_BACK` | 롤백 완료 | IN_PROGRESS | --- ## 3. ITSM → Jenkins 빌드 트리거 API ### 3-1. Jenkins REST API 호출 형식 ```bash # 파라미터 있는 빌드 트리거 curl -X POST \ "http://jenkins.agency.go.kr:8080/job/${JOB_NAME}/buildWithParameters" \ --user "itsm-bot:${JENKINS_TOKEN}" \ --data-urlencode "ITSM_SESSION_ID=${SESSION_ID}" \ --data-urlencode "ITSM_SR_ID=${SR_ID}" \ --data-urlencode "DEPLOY_ENV=${DEPLOY_ENV}" \ --data-urlencode "TARGET_SERVER=${TARGET_SERVER}" ``` ### 3-2. GUARDiA ITSM core/cicd.py ```python import httpx JENKINS_URL = os.getenv("JENKINS_URL", "http://jenkins.agency.go.kr:8080") JENKINS_USER = os.getenv("JENKINS_USER", "itsm-bot") JENKINS_TOKEN = os.getenv("JENKINS_TOKEN", "") async def trigger_pipeline( job_name: str, session_id: int, sr_id: str, deploy_env: str = "dev", target_server: str = "", ) -> dict: url = f"{JENKINS_URL}/job/{job_name}/buildWithParameters" auth = (JENKINS_USER, JENKINS_TOKEN) params = { "ITSM_SESSION_ID": str(session_id), "ITSM_SR_ID": sr_id, "DEPLOY_ENV": deploy_env, "TARGET_SERVER": target_server, } async with httpx.AsyncClient(timeout=30) as client: resp = await client.post(url, auth=auth, params=params) resp.raise_for_status() # 큐 번호는 Location 헤더에서 추출 location = resp.headers.get("Location", "") queue_id = location.rstrip("/").split("/")[-1] if location else None return {"queued": True, "queue_id": queue_id} ``` --- ## 4. 환경 변수 설정 ### 4-1. GUARDiA ITSM (.env) ```bash # Jenkins 연동 JENKINS_URL=http://jenkins.agency.go.kr:8080 JENKINS_USER=itsm-bot JENKINS_TOKEN= JENKINS_CALLBACK_URL=http://itsm.agency.go.kr:8000/api/vibe/callback # 기본 Jenkins Job 이름 (프로젝트별로 재정의 가능) JENKINS_DEFAULT_JOB=guardia-default-pipeline ``` ### 4-2. Jenkins (JCasC or Manage Jenkins) ```yaml # jenkins.yaml 참고 globalNodeProperties: - envVars: env: - key: ITSM_URL value: "http://itsm.agency.go.kr:8000" - key: ITSM_CALLBACK_URL value: "http://itsm.agency.go.kr:8000/api/vibe/callback" ``` ### 4-3. Jenkins Credentials 등록 (ITSM Token) ``` Kind: Secret text ID: itsm-api-token Secret: ``` --- ## 5. 봇 명령어 ↔ Jenkins 파이프라인 매핑 | 봇 명령어 | Jenkins Job | 설명 | |---------|------------|------| | `!build ` | `{project}-build` | 빌드 + 테스트만 | | `!deploy dev` | `{project}-deploy` | 개발 서버 배포 | | `!deploy prd` | `{project}-deploy` | 운영 서버 배포 (승인 필요) | | `!rollback <버전>` | `{project}-rollback` | 이전 버전 롤백 | --- ## 6. SR 상태 전환 흐름 ``` OPEN │ !vibe 명령 ▼ IN_PROGRESS (바이브 코딩) │ !build 명령 ▼ IN_PROGRESS (빌드/테스트) │ Jenkins 빌드 완료 ▼ IN_PROGRESS (배포) │ Jenkins 배포 완료 + 헬스체크 통과 ▼ COMPLETED │ 자동 이메일 + 메신저 발송 ``` 실패 시: ``` IN_PROGRESS │ Jenkins FAILED 콜백 ▼ FAILED │ 롤백 자동 실행 (설정 시) ▼ IN_PROGRESS (수동 조치 대기) ``` --- ## 7. 알림 포맷 ### 7-1. 배포 완료 메신저 알림 ``` ✅ [SR-2026-001234] 배포 완료 📌 프로젝트: my-app 🌿 브랜치: main 🏗️ 빌드: #15 🌐 환경: 운영 (prd) ⏱️ 소요 시간: 4분 23초 ✔️ 빌드: 성공 ✔️ 테스트: 120/120 통과 ✔️ 배포: /opt/apps/my-app ✔️ 헬스체크: HTTP 200 OK 승인자: 홍길동, 김철수 담당자: 이영희 ``` ### 7-2. 배포 실패 메신저 알림 ``` ❌ [SR-2026-001234] 배포 실패 📌 프로젝트: my-app 🏗️ 빌드: #15 💥 실패 단계: Health Check 원인: 서비스 응답 없음 (3회 재시도 후 타임아웃) 🔄 자동 롤백 완료 → 빌드 #14로 복원 조치 필요: http://jenkins.agency.go.kr:8080/job/my-app/15/ ``` --- ## 8. 연동 테스트 ```bash # 1. ITSM → Jenkins 트리거 테스트 curl -X POST \ "http://jenkins.agency.go.kr:8080/job/test-pipeline/buildWithParameters" \ --user "itsm-bot:" \ --data-urlencode "ITSM_SESSION_ID=1" \ --data-urlencode "ITSM_SR_ID=SR-TEST-001" \ --data-urlencode "DEPLOY_ENV=dev" # 2. Jenkins → ITSM 콜백 테스트 curl -X POST "http://itsm.agency.go.kr:8000/api/vibe/callback" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer " \ -d '{ "session_id": "1", "sr_id": "SR-TEST-001", "status": "COMPLETED", "message": "연동 테스트 성공", "build_number": "1" }' ```