스크랩
복잡한 CI는 이제 그만, Git 훅과 nq로 만드는 초경량 CI 파이프라인

거창한 CI, 정말 필요할까요?
대규모 팀의 배포 파이프라인이라면 몰라도, 개인 프로젝트나 소규모 서버 운영에서는 GitHub Actions 같은 CI 도구가 오히려 과합니다. 복잡한 YAML 설정, 느린 실행 속도, 셀프호스팅의 번거로움까지 감수하면서도 정작 완전한 빌드 격리나 비밀정보 관리 같은 고급 기능은 쓸 일이 없는 경우가 많죠.
이번에 소개할 방법은 개인 서버의 bare Git 저장소에 post-receive 훅 하나만 추가해서 테스트, 빌드, 파일 이동까지 자동화하는 초미니멀 CI 구성입니다.
핵심 아이디어: post-receive 훅 + nq
1. bare 저장소 준비
ssh server git init --bare repo
git clone server:repo
서버에 bare 저장소를 만들고, 로컬에서는 평소처럼 clone해서 작업하면 됩니다.
2. post-receive 훅으로 CI 트리거
bare 저장소의 hooks 디렉터리에 셸 스크립트로 post-receive 훅을 넣어두면, push할 때마다 자동으로 CI가 시작됩니다.
3. 왜 훅에서 바로 실행하면 안 될까?
작업을 훅 스크립트 안에서 직접 돌리면 두 가지 문제가 생깁니다.
- push 거부: 스크립트가 실패하면 push 자체가 거부돼 버립니다.
- push 지연: 스크립트 실행이 오래 걸리면 push 완료까지 함께 늦어집니다.
4. 해결책: 최소형 작업 큐 nq
그래서 훅에서는 무거운 작업을 직접 실행하지 않고, 초경량 작업 큐인 nq를 호출해서 백그라운드 큐에 작업을 던져놓기만 합니다. push는 즉시 끝나고, 실제 빌드·테스트는 백그라운드에서 조용히 처리되는 구조죠.
로그 확인도 간단합니다.
ssh server nqtail -a
이 명령 하나로 최근 작업 로그를 바로 확인할 수 있어, 별도의 대시보드나 모니터링 툴 없이도 운영이 가능합니다.
필요하면 확장도 가능
이 구성은 최소한으로 시작하지만, 필요에 따라 다음과 같이 확장할 수 있습니다.
- 빌드 격리: landlock, Podman을 활용해 빌드 환경을 격리
- 비밀정보 관리: sops로 시크릿 관리
- 개발 워크플로우 확장: Git 이메일 패치,
git-shell,git http-backend등을 조합해 더 다양한 협업 방식 지원
정리
- bare 저장소의
post-receive훅 +nq작업 큐 조합만으로 충분히 실용적인 CI를 만들 수 있습니다. - 훅에서는 무거운 작업을 직접 실행하지 말고 큐에 던지기만 해서 push 속도와 안정성을 확보하세요.
- 로그는
nqtail -a로 간단히 확인 가능하며, 필요할 때 Podman·sops 등으로 얼마든지 고도화할 수 있습니다.
거창한 CI 서비스에 지친 분이라면, 이런 미니멀한 접근도 충분히 매력적인 대안이 될 수 있습니다.