정리 X
CI/CD
va95
2025. 1. 28. 20:52
CI가 뭐지? — Continuous Integration
CD는 뭐지? — Continuous Delivery, Continuous Deployment
CI/CD 플랫폼
CI/CD 플랫폼은 엄청나게 많습니다. 이 중에 제가 사용해본 플랫폼은 Jenkins, Github Action, CircleCI가 있습니다.
- Jenkins
- CircleCI
- Github Action
- ...
플랫폼 마다 인터페이스가 조금씩 다르고 가격 정책도 달라서 선택하기 전에 고민이 필요합니다. 플랫폼을 관리하는 방식에서 크게 다른 점이 있다면 On-premise 방식과 Cloud 방식이 있습니다.
On-premise
On-premise는 직접 설치해서 관리하는 방식입니다. 대표적으로 On-premise 방식에서 사용되는 플랫폼은 Jenkins 입니다. 오픈소스이고 무료라서 소규모 팀에서 많은 선택을 받는 것 같습니다. 몇 가지 단점과 장점이 있습니다.
장점
- 디바이스 구매 비용과 전기세를 빼면 직접적인 추가 비용이 들지 않습니다. (이걸 유지하기 위한 시간이 드니까 간접적으로 보면 인건비가 들겠네요)
- 팀을 위한 공용 서버가 1대 생기는거라서 필요한 프로그램이나 스크립트를 마음대로 실행할 수 있습니다. CI/CD 플랫폼 이외에도 다른 서버를 운영하면서 생산성을 키울 수도 있겠네요.
단점
- 직접 설치해서 사용해야해서 디바이스 관리가 필요합니다. 회사 맥미니에 CI 서버를 설치해두고 쓴 적이 있는데 의도치않게 서버가 종료되면 누군가 다시 켜야했습니다.
- 캐시 용량도 가득차면 한 번씩 초기화가 필요해서 불편합니다.
- Xcode 같은 환경 설정을 동적으로 변경하기 어렵습니다.
- 보통 물리 서버 1대를 사용하는데, CPU, RAM 리소스의 한계가 있기 때문에 여러 Job을 실행시키기 어렵습니다.
Cloud
많은 곳에서 클라우드 방식을 사용하고 있습니다.
장점
- 개발 환경을 관리하기 쉽습니다. 기본 제공되는 도커 이미지들에서 선택해서 사용할 수 있습니다.
- 여러 Job을 병렬로 실행시킬 수 있습니다. 빌드를 위해 가상 서버를 띄워서 사용하기 때문에 여러 Job을 동시에 실행해도 충돌이 나지 않습니다.
- 일관된 동작을 보장받을 수 있습니다.
- 물리 서버를 관리하지 않아도 됩니다.
단점
- CI를 열심히 사용할 수록 비용이 증가합니다.
- 개발 환경 설정이 쉽지만 플랫폼에서 도커 이미지를 deprecated 시키는 경우도 있습니다.
- 하나의 플랫폼에 의존되면 다른 플랫폼으로 넘어가기 어렵습니다. 불가능한 것은 아니지만 CI 실행을 위한 설정 파일이 플랫폼 마다 다릅니다.
Github Action Core 개념
- Github Action을 이해하기 위해서 알아야 하는 개념은 Workflow, Event, Job, Step, Action, Runner 등이 있음
- 1) Workflow
- 여러 Job으로 구성되고, Event에 의해 트리거될 수 있는 자동화된 프로세스
- 최상위 개념
- Workflow 파일은 YAML으로 작성되고, Github Repository의 .github/workflows 폴더 아래에 저장됨
- 2) Event
- Workflow를 Trigger(실행)하는 특정 활동이나 규칙
- 예를 들어 다음과 같은 상황을 사용할 수 있음
- 특정 브랜치로 Push하거나
- 특정 브랜치로 Pull Request하거나
- 특정 시간대에 반복(Cron)
- Webhook을 사용해 외부 이벤트를 통해 실행
- 자세한 내용은 Events that trigger workflows 참고
- 3) Job
- Job은 여러 Step으로 구성되고, 가상 환경의 인스턴스에서 실행됨
- 다른 Job에 의존 관계를 가질 수 있고, 독립적으로 병렬 실행도 가능함
- 4) Step
- Task들의 집합으로, 커맨드를 날리거나 action을 실행할 수 있음
- 5) Action
- Workflow의 가장 작은 블럭(smallest portable building block)
- Job을 만들기 위해 Step들을 연결할 수 있음
- 재사용이 가능한 컴포넌트
- 개인적으로 만든 Action을 사용할 수도 있고, Marketplace에 있는 공용 Action을 사용할 수도 있음
- 6) Runner
- Gitbub Action Runner 어플리케이션이 설치된 머신으로, Workflow가 실행될 인스턴스
- Github에서 호스팅해주는 Github-hosted runner와 직접 호스팅하는 Self-hosted runner로 나뉨
- Github-hosted runner는 Azure의 Standard_DS2_v2로 vCPU 2, 메모리 7GB, 임시 스토리지 14GB