정리 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