ContinuousIntegration:ImplementationGuide
CI/CD Platform Implementation Guide
CI/CD 플랫폼은 소프트웨어 개발 생명주기에서 코드 통합, 테스트, 빌드, 배포를 자동화하는 시스템이다.
본 문서는 Drone CI와 유사한 CI/CD 플랫폼을 직접 구현하기 위한 기술적 요구사항, 아키텍처 설계, 그리고 구현 절차를 다룬다.
Pipeline
| |
| + GitLab CI#Pipeline 항목 참조 |
Drone CI의 경우:
| |
최소 조건
결론부터 말하면 ...
- yaml
- pipeline 핵심만 정확히 있다
구축 한 후 API 사용하자.
Developing
최소한 VCS 의 WebHook Server/Client 필요
CI PIPELINE
격리된 빌드 환경이 필요함:
커스텀 스크립트 실행을 위해 DNS 서버 필요: (sudo apt install ... 따위를 할 때 debian repo 접근함. -> dns resolver가 quering 한다)
- DNS Server (traefik, Dnsmasq, CoreDNS, etc ...)
- Package management system
CD PIPELINE
Continuous delivery vs Continuous deployment 둘 중 어떤게 목적?
- Review
- Issue Tracking System (trac, mantis, redmine, github, gitlab, etc ...)
- Metric Report (SonarQube, etc ...)
- Log monitoring
- Log rendering (Web Terminal - xterm.js, ANSI Terminal Escape)
- Package management system (Terraform Module Registry, pypi, npm, dpkg, rpm, etc ...)
- flutter -> https://pub.dev/
- Cluster management (rancher, k8s, swarm, etc ...)
- Terraform
- Healthcheck
Build Agent (Runner)
실제 빌드 작업을 수행하는 Runner:
- 새로운 Machine 등록시 Runner 필요. (e.g. GitLab:Runner)
- 작업 관리 API - 서버로부터 빌드 작업 및 환경 등 요청
- 컨테이너 오케스트레이터 - 격리된 빌드 환경 생성 및 관리
- 로그 스트리밍 - 실시간 빌드 로그를 서버로 전송 (API 레벨에서는 지원되는 서비스 못봄)
- 아티팩트 관리 - 빌드 결과물(패키지, 로그, 캐시 등) 을 수집하고 저장소에 업로드
- 리소스 모니터링 - CPU, 메모리, 디스크 사용량 추적
Runner 의 실행 Flow
- 이벤트 수신 - Git 저장소에서 웹훅을 통해 push/PR 이벤트 발생
- 파이프라인 로드 - 저장소에서 yml (또는 유사 파일) 가져오기
- 파싱 및 검증 - 파이프라인 정의(e.g. JSON Schema)를 검증하고 작업 단위로 분할
- 환경 및 시크릿 로드 - vault 같은 Key management 필요. Environment Variables 정의 로드.
- 작업 큐잉 - 각 작업을 메시지 큐에 추가 (Kafka, redis, RDBMS, etc ...)
- 작업 할당 - 스케줄러가 유휴 러너를 찾아 작업 할당 (Event scheduler)
- 매트릭스 빌드 가능? - 여러 환경/버전 조합에서 동시 빌드/테스트
- 캐시 로드 - 이전 작업의 캐시들이 존재할 경우 불러온다.
- 컨테이너 실행 - 러너가 격리된 컨테이너를 생성하고 빌드 스크립트 실행
- 종속성 저장소 레지스트리는? - 미러서버 가능
- 빌드 플러그인 마켓플리이스 연동은? - 미러서버가 대부분 없음 - 컨테이너 레지스트리에 미리 캐싱할수는 있음
- 로그 스트리밍 - 실시간 로그를 서버로 전송 (WebSocket/gRPC etc ...)
- 결과 수집 - 빌드 성공/실패 상태, 아티팩트, 테스트 결과 수집 (S3, minio, etc ...)
- 알림 전송 - 이메일, Slack 등으로 빌드 결과 통지
GitLab 에서는
GitLab_Runner_GitLab_Docs_-_Runner_execution_flow.png
구현 단계
1단계: 핵심 아키텍처 설계
- Server-Agent 분산 아키텍처 구조 설계
- gRPC 기반 통신 프로토콜 정의
- 데이터베이스 스키마 설계 (파이프라인, 빌드, 로그 등)
2단계: 기본 Server 구현
- HTTP API 서버 기본 골격 (REST API)
- 사용자 인증/인가 시스템
- 저장소(Git) 연동 웹훅 수신 엔드포인트
- 데이터베이스 연동 (PostgreSQL/SQLite)
3단계: Pipeline 파서 구현
- YAML 파이프라인 파일 파서
- Pipeline 문법 정의 및 검증
- Step/Stage 구조 파싱
- 환경변수, 시크릿 처리 로직
4단계: Runner(Agent) 기본 구현
- Agent 등록 및 인증 메커니즘
- Server와의 gRPC 통신 클라이언트
- 작업 큐 폴링 및 수신
- 하트비트 및 상태 보고
5단계: 컨테이너 실행 엔진
- Docker API 연동
- 컨테이너 생성, 실행, 삭제
- 볼륨 마운트 및 네트워크 설정
- 로그 스트리밍 구현
6단계: 작업 스케줄링 및 큐 시스템
- 작업 큐 관리 (Redis/메모리 기반)
- Agent 로드밸런싱 및 작업 할당
- 우선순위 처리
- 동시 실행 제한 및 리소스 관리
7단계: Git 저장소 연동
- GitHub/GitLab/Gitea Webhook 처리
- OAuth 인증 통합
- 저장소 클론 및 체크아웃 로직
- Commit 상태 업데이트 API
8단계: 로그 수집 및 저장
- 실시간 로그 스트리밍 (WebSocket/SSE)
- 로그 영구 저장 (파일/DB)
- 로그 검색 및 필터링
- 로그 보관 정책
9단계: 시크릿 관리
- 암호화된 시크릿 저장소
- 저장소/조직/글로벌 시크릿 계층
- 런타임 시크릿 주입
- 시크릿 마스킹 (로그에서)
10단계: 웹 UI 구현
- 대시보드 (빌드 목록, 상태)
- 파이프라인 상세 뷰
- 실시간 로그 뷰어
- 설정 관리 페이지
11단계: 캐시 시스템
- 의존성 캐싱 메커니즘
- 볼륨 기반 캐시 저장소
- 캐시 키 관리 및 무효화
- S3/MinIO 연동 (선택적)
12단계: 플러그인/확장 시스템
- 플러그인 인터페이스 정의
- 커스텀 스텝 실행 엔진
- 마켓플레이스 또는 레지스트리 (선택적)
13단계: 모니터링 및 메트릭
- Prometheus 메트릭 노출
- 빌드 성공률, 실행 시간 등 통계
- Agent 상태 모니터링
- 알림 시스템 연동
14단계: 고급 기능
- Matrix 빌드 (병렬 실행)
- 조건부 실행 (when 조건)
- 수동 승인 단계
- 아티팩트 저장 및 배포
15단계: 성능 최적화 및 안정화
- 동시성 및 병렬 처리 최적화
- 데이터베이스 쿼리 최적화
- 에러 핸들링 및 재시도 로직
- 부하 테스트 및 튜닝