본문 바로가기

공부

[CI/CD] Gitlab CI/CD vs Github action vs Jenkins

반응형

 

최근에 현대자동차에서 백엔드 개발하고 있는 친구를 만났는데,

그 친구 회사는 gitlab CI/CD를 사용하고 있다고 한다.

github action으로 deploy 파이프라인을 구축해야 하는 나로서,

gitlab는 어떤 차이가 있고, Jenkins 를 포함하여

어떤 것을 고민해보고 인지하고 있으면 좋을지를 알기 위해서 정리해보고자 한다.

 

 

CI/CD 툴 중에서 가장 많이 쓰이는 GitHub Actions GitLab CI/CD, Jenkins 세 가지를 언급하려고 한다.

 

 

 

GitHub Actions란?

https://github.com/features/actions

Github가 공식적으로 제공하는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD 플랫폼

: Github Actions은 Github 저장소를 기반으로 소프트웨어 개발 Workflow를 자동화 할 수 있는 도구

 

repository 에서 PR이나, push 같은 이벤트를 트리거로 github 작업 workflow를 구성할 수 있다.

workflow : 하나 이상의 작업이 실행되는 자동화 프로세스로, 각 작업은 자체 가상 머신 또는 컨테이너 내부에서 실행

workflow는 yml파일에 의해 구성되며, 테스트, 배포 등 기능에 따라 여러 개의 workflow를 만들 수 있다.

생성된 workflow는 .github/workflow 디렉토리 이하에 위치한다.

 

장점 :

  • GitHub 레포지토리랑 바로 연동돼서 따로 복잡하게 설정 안 해도 됨.
  • YAML 파일 하나로 파이프라인 설정 가능
  • 마켓플레이스에 엄청나게 많은 액션들(워크플로우 구성 요소) 존재

단점

  • GitHub에 의존적

 

GitLab CI/CD

https://about.gitlab.com/pricing/feature-comparison/

GitLab CI/CD는 GitLab의 내장 CI/CD 시스템으로 더 파워풀함

 

장점 : 

  • GitLab에 있는 모든 프로젝트에서 바로 사용 가능.
  • 파이프라인이 엄청 디테일하게 설정 가능해서 복잡한 워크플로우도 OK
  • Docker 이미지, 쿠버네티스 같은 최신 기술도 잘 지원
  • 자체 호스팅 가능

단점

  • 설정이 복잡할 수 있어서 처음 쓸 때 좀 부담

 

GitLab vs Github,

둘 다 좋은 도구지만, GitHub Actions는 GitHub 사용자에게 최적화된 툴이고, GitLab CI/CD는 좀 더 다양한 설정을 원하거나 독립적인 시스템을 갖추고 싶을 때 유리

약 내가 GitHub에 있는 프로젝트를 주로 관리하고 있다면 GitHub Actions가 더 직관적. 반면, 좀 더 복잡한 파이프라인을 요구하는 대규모 프로젝트라면 GitLab CI/CD가 적합

 

GitHub는 클라우드 기반이어서 자체 서버(in-house)에 설치해서 쓰는 건 어려우며, GitHub 자체 호스팅 솔루션은 따로 제공 x, 회사 내부에서 쓰는 전용 서버에 올려서 사용하고 싶다면 GitHub는 맞지 않음

그럴 때 GitLab이 좋은 대안. GitLab은 자체 서버에 설치 가능한 ‘GitLab Self-Managed’ 버전을 제공

 

 

기술 의사 결정자(Technical Desision Maker)

TDM 문제 DevOps 솔루션 GitLab GitHub
빌드/코드를 테스트하는 시강늘 줄이고, 복잡성을 줄임 파이프라인 오케스트레이션 Parent-Child 파이프라인이 동시에 작동하여, 더 작은 하위 파이프라인 구성 가능 파이프라인 오케스트레이션이 없어, 실행시간이 김
코드 업데이트 오류 및 충돌 제거 병합 오케스트레이션 Advanced Merge Train 처리 로직은 기본 개발 브랜치를 초록불로 유지 처리 로직이 없어 많은 코드에서 커밋 충돌 발생
초기 구성 시간과 러닝 커브 줄임 미리 구성된 파이프라인 Auto DevOps는 즉시 사용 가능한 파이프라인으로 구성  X

 

GitHub에서 누락된 GitLab CI 기능

GitLab 기능 설명
Built-in CI 플러그인 혹은 third party 구성 요소 X
새로운 팀원을 위한 DevOps 프로세스 단순화 Auto DevOps는 코드를 인식하고, 자동으로 DevOps 템플릿 선정
merge전 앱 리뷰를 통한 결함 감사 및 개발 시간 단축 리뷰앱으로 변경을 미리 확인하고, 이를 위한 배포 환경 자동 종료 기능 포함
크고 복잡한 프로젝트와 팀 모델링 및 관리 큰 규모의 프로젝트를 관리 하기 위한 그룹, 그룹내 하위그룹, 그룹 파일 템플릿, 탐색 기능 제공

 

 

젠킨스(Jenkins)

: 젠킨스(Jenkins)는 거의 모든 언어의 조합과 소스코드 리포지토리(Repository)에 대한 지속적인 통합(CI)과 지속적인 배포(CD)를 무료로 제공 

젠킨스는 다른 일상적인 개발 작업을 자동화할 뿐 아니라 파이프라인(Pipeline)을 사용해 거의 모든 언어의 조합과 소스코드 리포지토리에 대한 지속적인 통합과 지속적인 전달 환경을 구축하기 위한 간단한 방법을 제공

젠킨스가 각각의 단계에 대한 스크립트 작성의 필요성을 없애주지는 않지만, 사용자가 쉽게 구축할 수 있는 것보다 더 빠르고 더 강력하게 빌드(Build), 테스트, 그리고 배포(deployment) 도구 등 체인 전체를 통합할 수 있는 방법을 제공

 

동작 방식

: 젠킨스는 주요 운영체제용 자바 8 WAR 아카이브와 설치 패키지, 홈브루(Homebrew) 패키지, 도커 이미지, 그리고 소스코드 형태로 사용

소스코드는 대부분 자바이며, 몇 개의 그루브(Groovy), 루비(Ruby), 그리고 앤틀러(Another Tool For Language Recognition, ANTLR) 파일

젠킨스를 실행하면 웹 화면을 생성하며 REST API 호출로 구동

 

장점 :

  • 프로젝트의 표준 컴파일 환경에서 컴파일 오류 검출
  • 자동화 테스트 수행
  • 코딩 규약 준수여부 체크
  • 프로파일링을 통해 소스 변경에 따른 성능의 변화 감시
  • 테스트 환경에 대한 배포작업
  • 개발 업무를 도와주는 많은 플러그인을 가지고 있음

 


 

그러면 왜 다들 기능적인 측면이 좋은 gitlab을 사용하지 않고, 다양하게 사용하나? 라는 의문으로 조금 더 찾아봤었는데

 

ㅋㅋㅋㅋ

jenkins를 사용하다가 github action으로 넘어간 사람,

- EC2 프리티어가 끝나고, test 코드 많아지고, 빌드시간 및 용량이 커져 비용 늚

- Jenkins 서버가 메모리 과부하로 종료되어 복구 번거로움

=> Jenkins와 달리 GitHub Action은 자체적인 컴퓨팅 자원을 제공하여 따로 물리서버를 관리하지 않아도 됨

=> 해당 Repo에 대한 관리를 GitHub Repository 한 공간에서 관리

=> YAML 파일 하나로 구축 가능, 버전 관리 가능

 

gitlab CI/CD를 사용하다가, github action으로 넘어간 사람,

- 과거에는 Gitlab의 느린 성능과 불안정성으로 사용경험이 좋지 않았음

=> 그러나 현재는 gitlab이 기능적으로 더 좋은 것 인정

별도의 서버 인프라 관리가 필요해, 서버 운영에 따른 추가 인력과 비용이 발생할 수 있으며, 인프라 전반에 대한 책임이 기업에 있음

 

그래서 우리 회사는 현재 그런거까지 신경을 쓸 서버 자원과, 인력이 부족하여 github를 채택한 것으로 사료됨.

 

 

 

 

참고 및 출처 

- https://devocean.sk.com/blog/techBoardDetail.do?ID=163365 

- https://thalals.tistory.com/470

- https://ohollama.tistory.com/76

- https://about.gitlab.com/why-gitlab/

- https://velog.io/@bagt/Github-Actions%EB%A5%BC-%ED%86%B5%ED%95%9C-%EB%B0%B0%ED%8F%AC

반응형