# 1. CI/CD (지속적 통합/배포) 시스템과 자동화된 빌드 검증 파이프라인
전 세계의 연구소에서 하루에도 수백 개의 Pull Request(PR) C++ 코드 뭉치가 PX4 메인스트림 저장소로 쏟아져 들어온다. 만약 누군가가 math 라이브러리의 쿼터니언(Quaternion) 부등호 하나를 잘못 컴파일링한 상태로 본진에 Merge 된다면, 내일 아침 지구상에 떠 있는 수백만 대의 픽스호크 드론이 땅으로 곤두박질치는 글로벌 대참사가 발생할 것이다.
이를 막기 위해, 코드를 푸시하는 즉시 인간의 개입 없이 클라우드 서버망(Cloud Server) 수백 대를 가동해 코드를 검증하고 플래싱 자격을 부여하는 기계들의 무자비한 심사대, 바로 CI/CD(Continuous Integration / Continuous Deployment) 자동화 파이프라인의 구조를 살펴본다.
GitHub Actions: 영원히 지치지 않는 1차 필터링 검문소
PX4 저장소의 최상단 디렉토리 숨겨진 폴더 .github/workflows/ 내부에는 수십 개의 YAML 설정 스크립트들이 거미줄처럼 짜여 있다. 개발자의 특정 분기(Branch)에서 푸시 트리거(Push Trigger)가 발생하는 순간, GitHub의 백엔드에서는 즉각 우분투(Ubuntu) 기반의 리눅스 가상머신 컨테이너들을 십수 개 배포(Provisioning)한다.
이 블레이드 러너(Blade Runner)들은 자비 없이 당신의 코드를 흠집 내기 시작한다.
- Format/Lint 린터(Linter) 스캐닝:
clang-format봇이 튀어나와 띄어쓰기 규정, 괄호 위치 강제 등 C++ 코드 스타일 가이드라인을 문자 단위로 해부한다. 한 톨의 띄어쓰기 오차라도 확인되면 빌드를 그 즉시 “Failure” 빨간 불로 때려버리고 당신에게 경고 이메일을 발송한다. - 멀티 하드웨어 병렬 컴파일 섀도우 테스트: Pixhawk v2, v5, v6c 등 현존하는 수십 가지 하드웨어 매크로를 대상으로 수십 대의 노스트 컨테이너가
arm-none-eabi-gcc병렬 빌드 레이스(Race)를 실시한다. 메모리 오버플로우나 링커(Linker) 에러가 단 한 개의 타겟 보드에서라도 발생하면 즉결 처분(Reject PR) 당한다.
SITL / HITL 시뮬레이션의 엔드 투 엔드(End-to-End) 다이내믹 검증
코드가 컴파일 성공했다고 끝난 것이 아니다. 치명적인 EKF 자세 제어 버그는 기계어 빌드에는 문제가 없지만 기체를 뒤집어버리기 때문이다.
이를 잡기 위해 통과된 펌웨어 아티팩트는 즉시 AWS 클라우드 등에 구축된 Jenkins 서버나 고강도 CI 시뮬레이션 컨테이너로 투척된다.
컨테이너 내부에서는 그래픽카드(GPU) 렌더링을 끈 ’Headless 모드’의 3D 물리 엔진(Gazebo)이 뒷단에서 급발진 호출된다. 방금 당신이 짠 플라이트 컨트롤(Flight Control) 알고리즘이 박힌 가상 모델 가상 드론 수십 대가 클라우드상의 가상 하늘(Void)에서 스폰(Spawn) 되어 시동을 걸고, 고도 100m로 이륙 통과를 시험받는다.
돌풍(Wind Gust) 인젝션과 센서 노이즈(Sensor Noise)가 퍼붓는 이 가상의 공역에서 추락 여부, 임무(Mission) 도달율, 타임아웃 지연 평가(Timeout Limit)를 무결성 100% 빈틈없이 통과한 커밋(Commit)만이 진정성 있게 리뷰어(Reviewer)를 호출할 자격을 획득한다.
이러한 CI/CD 아키텍처야말로 오픈소스 생태계를 방만함에서 지키고 항공 우주(Aerospace) 레벨의 코드 극강의 신뢰성을 영원히 담보해 내는 무자비한 문지기인 것이다.