Cloud + System/CI,CD

[CI/CD] Jenkins vs GitLabCI vs Travis

vell_zero 2021. 10. 19. 23:38

<참고>

https://owin2828.github.io/devlog/2020/01/09/cicd-1.html

 

[CI/CD] Jenkins vs GitLabCI vs Travis - 낮코밤코

CI/CD 환경을 구축하여 App을 배포해보는 것이 목적이다. 이를 위해 Jenkins를 이용하여 앱을 빌드하고, AWS Code Deploy를 이용해 배포하는 환경을 구축할 것이다. 본격적으로 시작하기 전에 CI/CD 파이프

owin2828.github.io

이번 시리즈에서는


CI/CD 환경을 구축하여 App을 배포해보는 것이 목적이다.
이를 위해 Jenkins를 이용하여 앱을 빌드하고, AWS Code Deploy를 이용해 배포하는 환경을 구축할 것이다.

본격적으로 시작하기 전에 CI/CD 파이프라인 구축을 위한 서비스들이 무엇이 있는지 살펴보고,
다음과 같은 솔루션들의 장단점을 분석하고자 한다.

  • Travis
  • GitLab CI
  • Jenkins

1. Trvais


Travis 로고
별도의 회사였으나, GitHub에서 인수하였다.(GitHub는 MS가 인수함)
오픈소스용 무료 travis.org와 Private Repo를 위한 유료 travis.com을 별도로 운영하고 있고, 내용은 동일하다.장점

  • GitHub와의 연동(그냥 깃허브 계정으로 로그인하며 된다.)
  • YML 파일을 통한 쉬운 설정
  • 다양한 래퍼런스
  • 직접 서버를 운영할 필요 없이, Travis에서 알아서 VM으로 호스팅해 줌
  • 모든 job이 독립적(서로 간의 영향을 받지 않음)

단점

  • Jenkins에 비해 플러그인의 종류가 적음
  • 유료 서비스를 사용할 경우, 가격이 꽤 비쌈(기본: 69$/month, 일반: 129$/month)

2. GitLab CI


Gitlab CI 로고
GitLab 서비스에 내장되어 있다.
On-Premise 방식으로 설치하여 사용할 수도 있고,  서비스로 사용할 수도 있다.
GitLab CI만 Runner를 직접 호스팅하여 사용할 수 있는데, 이를 통해 고성능 혹은 서비스에 트고하된 환경에서 실행할 수 있다.

Runner: repo로부터 소스코드를 받아 해당 스크립트를 돌리는 작업을 수행
GitLab의 경우shared runner를 사용해서 계획적으로 돌릴 수 있다.
On-Premise 방식에서는 당연히 지원하고,
GitLab의 클라우드 서비스를 사용하는 경우에도, Runner만 따로 운용할 수 있다.

장점

  • GitLab과의 손쉬운 연동
  • Runner가 Docker 컨테이너 기반이라, Docker 친화적임(Docker Repo 무료 제공)
  • UI가 쉽고 간편함
  • 모든 job이 독립적

단점

  • 역시나 Jenkins에 비해 플러그인의 종류가 적음
  • 모든 job에 대해 artifact를 정의 및 업로드/다운로드를 해야함

3. Jenkins


Jenkins 로고
Java 기반의 오픈소스로 구성되어 있으며, CI계의 아버지라 불린다.
제일 오래된 만큼 다양한 플러그인을 지원하며, 사용자도 관련 문서도 많이 존재한다.장점

  • 무료
  • 다양한 IDE를 지원하며, 커스터마이징이 다양
  • 많은 사용자들을 보유하고 있고, 관련 문서가 다양
  • 호스팅을 직접해야하기 때문에 관련된 모든 부분을 관리할 수 있음

단점

  • 다양한 플러그인 -> 플러그인 지옥
  • 규모가 작은 프로젝트의 경우, 설정하는데 리소스 낭비가 발생할 수 있음
  • 호스팅을 직접해야하기 때문에 서버 운영 및 관리 비용이 발생

개인적인 견해로는


CI/CD를 적용해야 한다는 생각에 제일 유명한 Jenkins를 사용하려는 사람들이 많은것 같다.
하지만, Jenkins는 오래된 만큼 장단점이 확실한 솔루션임을 알고 사용했으면 좋겠다.

특히 Build Server를 직접 구매 및 운영해야 하기 때문에 발생하는 단점이 생각보다 크게 다가오게 된다.
하나부터 열까지 전부 환경설정을 구축해야하며, 서버를 관리하는데 발생하는 비용이 낭비가 될 수 있기 때문이다.

Jenkins를 사용할 때, 각종 방화벽 작업이나 서버의 관리  운용등은 생각보다 많은 리소스를 요구한다.

따라서 규모가 크지않은 프로젝트거나, 외부 클라우드 서비스를 이용하는 상황등이라면 Jenkins말고 다른 서비스도 고려해볼 가치가 있다고 생각한다.
내가 글을 작성하는 이 블로그 또한 Travis를 사용하여 간단한 CI/CD 형태로 빌드 및 배포하게 되어있다.

개발을 하면서 느끼는 거지만, 모든 일에 정답은 없다.
상황에 맞게 최선의 방법을 채택하여 가장 높은 효율을 낼 수 있는 방안을 선택하는 것도 일류 개발자의 자질이 아닐까.

이 글에서는 언급하지 않았지만, AWS, CircleCI등 수많은 다른 방법도 존재한다.

Reference