Skip to content

ContinuousIntegration:ImplementationGuide

CI/CD Platform Implementation Guide

CI/CD 플랫폼은 소프트웨어 개발 생명주기에서 코드 통합, 테스트, 빌드, 배포를 자동화하는 시스템이다.

본 문서는 Drone CI와 유사한 CI/CD 플랫폼을 직접 구현하기 위한 기술적 요구사항, 아키텍처 설계, 그리고 구현 절차를 다룬다.

Pipeline

Gitlab_cicd_pipeline_infograph.png

+ GitLab CI#Pipeline 항목 참조

Drone CI의 경우:

Drone_CI_-_architecture_diagram.png

최소 조건

결론부터 말하면 ...

구축 한 후 API 사용하자.

Developing

최소한 VCS 의 WebHook Server/Client 필요

CI PIPELINE

격리된 빌드 환경이 필요함:

커스텀 스크립트 실행을 위해 DNS 서버 필요: (sudo apt install ... 따위를 할 때 debian repo 접근함. -> dns resolver가 quering 한다)

CD PIPELINE

Continuous delivery vs Continuous deployment 둘 중 어떤게 목적?

Build Agent (Runner)

실제 빌드 작업을 수행하는 Runner:

  • 새로운 Machine 등록시 Runner 필요. (e.g. GitLab:Runner)
  • 작업 관리 API - 서버로부터 빌드 작업 및 환경 등 요청
  • 컨테이너 오케스트레이터 - 격리된 빌드 환경 생성 및 관리
  • 로그 스트리밍 - 실시간 빌드 로그를 서버로 전송 (API 레벨에서는 지원되는 서비스 못봄)
  • 아티팩트 관리 - 빌드 결과물(패키지, 로그, 캐시 등) 을 수집하고 저장소에 업로드
  • 리소스 모니터링 - CPU, 메모리, 디스크 사용량 추적

Runner 의 실행 Flow

  1. 이벤트 수신 - Git 저장소에서 웹훅을 통해 push/PR 이벤트 발생
  2. 파이프라인 로드 - 저장소에서 yml (또는 유사 파일) 가져오기
  3. 파싱 및 검증 - 파이프라인 정의(e.g. JSON Schema)를 검증하고 작업 단위로 분할
  4. 환경 및 시크릿 로드 - vault 같은 Key management 필요. Environment Variables 정의 로드.
  5. 작업 큐잉 - 각 작업을 메시지 큐에 추가 (Kafka, redis, RDBMS, etc ...)
  6. 작업 할당 - 스케줄러가 유휴 러너를 찾아 작업 할당 (Event scheduler)
    • 매트릭스 빌드 가능? - 여러 환경/버전 조합에서 동시 빌드/테스트
  7. 캐시 로드 - 이전 작업의 캐시들이 존재할 경우 불러온다.
  8. 컨테이너 실행 - 러너가 격리된 컨테이너를 생성하고 빌드 스크립트 실행
    • 종속성 저장소 레지스트리는? - 미러서버 가능
    • 빌드 플러그인 마켓플리이스 연동은? - 미러서버가 대부분 없음 - 컨테이너 레지스트리에 미리 캐싱할수는 있음
  9. 로그 스트리밍 - 실시간 로그를 서버로 전송 (WebSocket/gRPC etc ...)
  10. 결과 수집 - 빌드 성공/실패 상태, 아티팩트, 테스트 결과 수집 (S3, minio, etc ...)
  11. 알림 전송 - 이메일, 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단계: 성능 최적화 및 안정화

  • 동시성 및 병렬 처리 최적화
  • 데이터베이스 쿼리 최적화
  • 에러 핸들링 및 재시도 로직
  • 부하 테스트 및 튜닝

See also