현대 소프트웨어 개발 환경에서는 빠른 속도와 높은 품질을 동시에 달성하는 것이 매우 중요합니다. 이를 위해 DevOps 문화와 CI/CD(Continuous Integration/Continuous Deployment) 접근 방식이 강조되고 있고요. 오늘날 개발 속도를 높여 고품질 소프트웨어를 만드는 데 도움이 되는 다양한 도구가 개발되고 있습니다. 그중에서도 GitLab CI/CD와 Jenkins는 CI/CD 파이프라인을 구축하고 관리하는 데 널리 사용되는 도구인데요. 이는 개발팀과 운영팀의 협업 프로세스를 자동화하여 생산성을 높입니다.

GitLab CI/CD는 Git 저장소와 통합된 플랫폼으로, 소스 코드와 CI/CD 파이프라인을 하나의 장소에서 관리하는 통합 접근 방식을 제공합니다. Jenkins는 오픈 소스 CI/CD 도구의 선구자로서, 다양한 플러그인과 확장성을 제공하여 조직에 딱 맞는 파이프라인을 만들도록 지원합니다.

두 도구는 각각의 장점과 특징이 있으며, 사용하기 전에 많은 요소를 따져봐야 합니다. 이 글에서는 GitLab CI/CD와 Jenkins의 주요 특징, 차이점을 살펴보고요. 이를 고려하여 ‘GitLab CI/CD와 Jenkins를 어떤 상황에서 각각 사용하면 좋을지’ 알아보겠습니다.

GitLab CI/CD 특징과 장점

photo | 인포그랩 GitLab | 인포그랩 GitLab
GitLab CI/CD 파이프라인 오버뷰. 출처=GitLab

GitLab CI/CD는 GitLab의 일부로, 소프트웨어 개발 및 배포 프로세스를 통합적으로 관리하는 플랫폼입니다. 이는 개발자들이 코드를 작성하고 리뷰하며, 테스트하고 배포하는 과정을 단순화하고 자동화하도록 설계되었습니다. GitLab CI/CD의 주요 특징과 장점은 다음과 같습니다.

  1. 통합된 환경

    GitLab은 소프트웨어 생명 주기 전반을 관리하는 플랫폼이기에 소스 코드와 CI/CD 파이프라인을 한 곳에서 관리할 수 있습니다. 이로써 개발자들은 불필요한 설정이나 화면 전환 없이 빠르고 효율적으로 파이프라인을 통합하고 실행할 수 있습니다.

  2. GitOps 방식

    GitLab은 .gitlab-ci.yml 파일을 사용하여 파이프라인을 정의합니다. 이 파일은 프로젝트 소스 코드에 포함되어 있으며, 개발자들은 코드와 함께 파이프라인을 설정하고 업데이트할 수 있습니다. 이로써 CI/CD 설정 파일이 바뀔 때마다 설정 파일 자체를 검증할 수도 있고, 잘못 설정하더라도 이전 상태로 돌아가기 쉽습니다.

  3. 다양한 러너 지원

    GitLab은 다양한 실행 환경에서 작동하는 러너(runner)를 지원합니다. 사용자는 GitLab이 제공하는 러너를 사용할 수 있고, 이를 직접 구축해 사용할 수도 있습니다. 따라서 특수한 라이선스나 정책을 따라야 한다면 GitLab CI/CD에서 특수한 러너를 손쉽게 구축할 수 있습니다.

GitLab CI/CD는 현대적인 DevOps 프로세스에 적합한 통합된 플랫폼으로, 코드 저장소와 CI/CD 프로세스를 단일화하여 개발자와 운영팀 사이의 협력을 강화하고 효율적인 개발 및 배포를 지원합니다.

Jenkins 특징과 장점

photo | 인포그랩 GitLab | 인포그랩 GitLab
Jenkins 파이프라인. 출처=Jenkins

Jenkins는 지속적 통합과 지속적 배포를 지원하는 오픈 소스 자동화 도구로, 개발자 및 운영팀이 빠르게 코드 품질을 개선하고 소프트웨어를 배포하도록 돕는 도구입니다. Jenkins는 많은 플러그인과 확장 기능을 제공하여 다양한 환경과 요구 사항에 부합하는 맞춤형 CI/CD 파이프라인을 구축할 수 있습니다. 다음은 Jenkins의 주요 특징과 장점입니다.

  1. GUI(그래픽 사용자 인터페이스) 환경

    Jenkins는 GUI 환경에서 복잡한 파이프라인을 시각적으로 확인하며 단계별로 구성하도록 지원합니다. 또한 변수를 넣거나 환경을 구성할 때 편리하게 사용할 수 있어 사용자가 자유롭게 스텝을 설계할 수 있습니다.

  2. 수많은 플러그인과 생태계

    Jenkins는 활발한 오픈 소스 커뮤니티와 풍부한 생태계를 갖추고 있습니다. 이 생태계에는 수많은 플러그인이 있어 사용자가 다양한 개발 언어, 테스팅 도구, 배포 환경 등을 사용할 수 있습니다. 이로써 개발팀은 필요한 기능을 선택하여 파이프라인을 구성하고 확장할 수 있습니다.

Jenkins는 기존에 널리 사용되던 오픈 소스 CI/CD 도구 중 하나로, 다양한 확장성과 유연성을 제공하여 프로젝트 요구 사항에 따라 파이프라인을 자유롭게 구축하고 관리하는 데 유용한 선택지입니다.

GitLab CI/CD와 Jenkins 차이점

GitLab CI/CD와 Jenkins는 CI/CD 파이프라인을 구축하고 관리하는 데 있어 강력한 도구입니다. 이들은 제각기 다른 특징과 접근 방식을 지니고 있는데요. GitLab CI/CD와 Jenkins를 설치, UI/UX, 확장성 측면에서 비교하면 아래와 같습니다.

GitLab CI/CDJenkins
설치GitLab을 설치했다면 즉시 사용할 수 있습니다.설치와 구성이 복잡합니다. 특히 필요한 플러그인을 찾고 설정하는 데 많은 시간이 듭니다.
UI/UXYAML과 GitLab CI/CD 문법에 익숙해야 합니다.간단한 파이프라인은 GUI를 사용할 수 있으나, Groovy 문법과 Jenkins 문법을 모두 익혀야 합니다.
확장성Docker 러너를 사용해 수많은 기능을 바로 사용할 수 있습니다.방대한 플러그인으로 다양한 환경과 도구를 통합할 수 있습니다.

어떤 상황에서 어떤 도구를 선택할까?

‘GitLab CI/CD와 Jenkins 중 어떤 도구를 선택하면 좋을지’ 궁금한 분들이 있을 텐데요. 이는 프로젝트의 요구 사항과 팀의 운영 방식에 따라 다릅니다.

  1. GitLab CI/CD를 사용하기에 좋은 요건

    조직에서 이미 GitLab을 사용하고 있다면 GitLab CI/CD를 사용하는 걸 권장합니다. GitLab을 설치하면 GitLab CI/CD도 바로 사용할 수 있기에 뭔가를 더 준비하지 않아도 되죠. GitLab CI/CD는 GitLab을 사용하는 모든 기업과 프로젝트에 어울립니다.

    아울러 프로젝트 관리의 효율성과 편의성을 극도로 추구한다면 GitLab CI/CD가 최적의 선택지입니다. 이는 프로젝트 내부에서 소스 코드와 파이프라인 현황, 애플리케이션의 결과물까지 한눈에 확인하도록 지원하는데요. 이로써 화면을 불필요하게 전환하지 않고도 프로젝트를 관리해 편리하죠.

    또 플러그인을 따로 만들 여력이 없어 고민한다면 역시 GitLab CI/CD를 사용하는 게 좋습니다. GitLab CI/CD에서는 산업 표준인 Docker 생태계를 그대로 사용할 수 있는데요. 이에 사용자가 따로 플러그인을 만들 필요가 없습니다.

  2. Jenkins를 사용하기에 좋은 요건

    조직에서 이미 Jenkins를 사용하고 있다면 이를 그대로 사용하는 게 낫습니다. Jenkins를 오랫동안 이용했다면 사용 관행이 굳어졌을 텐데요. 다른 CI/CD 도구로 바꾸려면 많은 시간과 노력을 들여야 합니다. 사용 관행을 바꾸기란 쉽지 않고, 그 과정은 소모적일 수 있죠.

    그러나 대규모 환경에서 자유롭게 파이프라인을 만들고 싶다면 Jenkins가 괜찮은 도구입니다. 이는 수많은 플러그인과 GUI 환경을 제공하기에 사용자에게 풍부한 선택지를 주고요. 사용자는 필요에 따라 원하는 플러그인과 GUI를 골라 유연하게 활용할 수 있죠.

    다만 Jenkins를 사용할 때, 다음 사항을 고려해야 합니다.

    첫째, Jenkins는 역할 기반 권한 관리 플러그인을 지원하지만 그룹을 만들어 관리하는 것처럼 정교하게 권한을 관리할 수 없습니다. 둘째, Jenkins에서 사용하는 Groovy 문법은 여러 분기를 만들거나 변수화하며 자유롭게 파이프라인을 조직하지만 이를 모르는 사람에게는 Jenkins의 진입 장벽일 뿐이죠. 셋째, Jenkins는 파이프라인만 서비스해 Git 서비스의 여러 특성과 통합하기 어렵습니다. API로 연동해도 한계가 있습니다.

맺음말

CI/CD는 현대 소프트웨어 개발에서 선택이 아니라 필수입니다. GitLab CI/CD와 Jenkins 같은 CI/CD 도구는 이를 효과적으로 수행하도록 돕고요. 이는 개발자와 운영팀 사이에 협력을 강화하고, 소프트웨어를 빨리 출시하며, 제품 품질을 안정적으로 유지하도록 지원합니다.

앞서 언급했듯 각 도구를 선택할 때는 프로젝트 특성과 팀의 요구 사항을 고려해 정해야 합니다. 프로젝트 규모, 복잡성, 협업 방식, 코드 관리 방식, 향후 확장성 등을 참고해 GitLab CI/CD와 Jenkins 가운데 적합한 도구를 선택하면 좋습니다. 중요한 건 선택한 도구를 효과적으로 활용해 지속적 개발과 배포 프로세스를 구축하고 관리하는 것입니다.

인포그랩은 GitLab을 바탕으로 더 성숙한 DevOps 조직이 될 수 있도록 지원합니다. GitLab(Omnibus/Cloud Native Hybrid) 구축 또는 DevOps에 관련된 지원이 필요하시면 문의하기 로 연락해 주십시오.

<참고 자료>

  1. Difference between Jenkins vs Gitlab CI
  2. GitLab CI Vs. Jenkins: Differences and Similarities [2023]
  3. Introducing Blue Ocean: a new user experience for Jenkins
  4. Migrating from Jenkins