저렴하게 CI 구축? Servo의 비법 공개!
Servo는 웹 브라우저 엔진 개발을 위해 GitHub Actions를 사용했지만, 자체 서버 기반의 CI 시스템 구축을 통해 비용 절감 및 성능 향상을 달성함.
GitHub Actions의 한계를 극복하기 위해 자체 호스팅 러너를 구축하고, 가상 머신을 활용하여 보안과 재현성을 확보함.
300 EUR/월의 비용으로 기존 GitHub-hosted runner 대비 획기적인 비용 절감과 빌드 시간 단축을 이뤄냈으며, Forgejo Actions 지원을 위한 노력도 진행 중임.
자체 호스팅 러너 아키텍처
Servo는 GitHub Actions의 제약 사항을 극복하기 위해 자체 호스팅 러너를 구축했다. 구체적으로, NixOS를 사용하여 서버 설정을 관리하고, Libvirt와 KVM을 통해 가상 머신을 생성하여 각 CI 작업을 격리한다. 따라서, ZFS를 활용하여 스토리지 효율성을 높이고, 자체 개발한 모니터링 서비스와 큐 서비스를 통해 러너의 상태를 관리한다.
GitHub Actions의 한계와 극복 전략
GitHub Actions의 느린 빌드 속도와 높은 비용 문제를 해결하기 위해, Servo는 자체 호스팅 러너를 도입했다. 반면, GitHub Actions의 캐싱 기능은 성능이 저조하여, 자체 러너 이미지에 Servo 빌드 아티팩트를 포함하는 방식으로 Incremental Build를 구현했다. 결과적으로, 체크아웃 시간을 단축하고, 빌드 시간을 70~90% 줄이는 효과를 얻었다.
안정적인 CI 시스템 구축을 위한 Fallback 전략
Servo는 자체 호스팅 러너의 가용성에 따라 GitHub-hosted runner로의 Graceful Fallback을 구현했다. 구체적으로, Decision Job을 통해 러너의 가용성을 확인하고, runs-on 설정을 동적으로 변경한다. 따라서, Timeout Job을 추가하여, 러너 할당 실패 시 워크플로우를 취소하고, GitHub Actions API를 활용하여 러너를 예약하는 방식으로 안정성을 확보했다.