매일 업데이트
2023-05-12 10:30 11 min

GitLab CI 대. 젠킨스: 차이점과 유사점 [2023]

소프트웨어 개발은 복잡한 과정으로, 계획, 분석, 설계, 개발, 테스트, 배포 및 유지 관리 단계를 거칩니다. 이 여정에서 소프트웨어 개발자들은 다양한 도구를 활용하게 됩니다.

지속적 통합 및 지속적 배포(CI/CD) 분야에서 GitLab CI와 Jenkins는 가장 대표적인 도구 중 하나입니다. CI/CD는 소프트웨어 개발 프로세스를 자동화하는 일련의 절차를 의미합니다.

본 글에서는 GitLab CI와 Jenkins를 각각 정의하고, 작동 방식과 주요 기능을 비교 분석하여 차이점을 명확히 합니다.

깃랩 CI란?

GitLab Continuous Integration and Delivery는 개발된 코드를 프로덕션 환경에 구축, 테스트 및 배포하는 데 필요한 단계를 자동화하는 데브옵스 도구입니다.

GitLab CI는 크게 지속적 통합(CI)과 지속적 배포/딜리버리(CD)로 구성됩니다.

지속적 통합은 빌드 자동화를 담당하며, 코드 검토를 통해 피드백을 제공하고, 코드의 보안 및 품질 테스트를 자동으로 실행합니다. 또한, CI는 프로덕션 환경에 배포할 릴리스 패키지를 생성하는 역할도 수행합니다.

GitLab CI의 지속적 배포 기능은 인프라 자동 프로비저닝, 티켓 관리, 인프라 변경 관리, 릴리스 버전 관리 등을 수행합니다. CD는 점진적인 코드 배포 환경을 제공하여 모든 변경 사항을 확인 및 모니터링할 수 있도록 하며, 필요에 따라 변경 사항을 롤백할 수 있는 기능을 지원합니다.

이 두 기능이 결합되면 최소한의 수동 개입으로 전체 소프트웨어 개발 수명 주기(SDLC)를 자동화할 수 있습니다.

요약하자면, GitLab CI는 다음과 같은 용도로 사용됩니다:

  • 코드 저장 및 관리
  • CI/CD 파이프라인 자동화
  • 이슈 추적
  • 코드 보안 강화
  • 협업 기능 제공

GitLab CI 사용의 이점

  • 속도 향상: 코드 빌드, 테스트 및 배포와 같은 수동 프로세스를 자동화하여 개발 속도를 높입니다.
  • 코드 품질 향상: 프로덕션 환경에 배포하기 전에 코드의 버그와 오류를 식별하여 코드 품질을 향상시킵니다.
  • 보안 강화: 취약점 스캔, 비밀 관리, 코드 스캔 등 다양한 보안 기능을 제공하여 해킹 위협을 줄입니다.
  • 유연성: 개발팀의 요구 사항에 맞춰 GitLab CI를 사용자 정의할 수 있으며, 주요 언어 및 프레임워크와 호환됩니다.
  • 자동 테스트: 테스트 자동화 스크립트를 작성하고 실행하여 수동 테스트를 줄입니다.

젠킨스란?

Jenkins는 확장 가능한 자동화 서버로, 오픈 소스 도구입니다. 사용자가 CI/CD 파이프라인을 관리하고 구축하는 데 도움을 주며, 소프트웨어의 품질, 안정성 및 제공 속도를 향상시키는 데 기여하여 데브옵스 및 소프트웨어 엔지니어에게 선호되는 도구입니다.

Jenkins는 파이프라인에서 일련의 '작업' 또는 단계를 실행하며, 각 작업은 순차적으로 실행되는 여러 단계로 구성됩니다. Jenkins 단계는 빌드, 테스트, 배포 또는 소프트웨어 개발 수명 주기에서 자동화할 수 있는 다른 작업이 될 수 있습니다.

Jenkins의 주요 용도는 다음과 같이 요약할 수 있습니다:

  • 지속적 통합
  • 지속적 배포
  • 자동화된 테스트
  • 모니터링 및 보고
  • 코드 스캔
  • 작업 스케줄링

Jenkins 사용의 이점

  • 확장성: 소규모 및 대규모 애플리케이션 모두에서 Jenkins를 사용할 수 있습니다.
  • 쉬운 구성: Jenkins는 충분한 리소스를 기반으로 간단한 구성 프로세스를 제공합니다.
  • 대규모 커뮤니티: Jenkins는 오랜 기간 사용되어 왔으며 많은 사용자를 확보하고 있습니다.
  • 다양한 플러그인: 플러그인을 사용하여 Jenkins의 기능을 확장할 수 있습니다.
  • 병렬 작업 실행: 여러 작업을 동시에 수행하여 시간을 절약할 수 있습니다.

GitLab CI와 Jenkins의 유사점

  • 둘 다 지속적 통합과 지속적 배포를 지원합니다.
  • 둘 다 오픈 소스 도구입니다.
  • 둘 다 큰 커뮤니티를 가지고 있습니다.
  • 둘 다 다양한 언어와 프레임워크를 지원합니다.
  • 둘 다 소프트웨어 개발 수명 주기의 여러 작업을 자동화합니다.
  • 둘 다 플러그인 및 확장 기능 생태계를 제공합니다.

GitLab CI와 Jenkins: 기능 비교

기능 GitLab CI Jenkins
오픈 소스
언어 지원 다양한 언어 지원 다양한 언어 지원
가격 대부분 기능은 무료 플랜에서 사용 가능, 유료 플랜은 추가 기능 제공 무료, 확장 기능은 플러그인을 통해 가능
출시 시기 비교적 새로운 플랫폼, 2014년 출시 Hudson에서 파생되어 2011년 Jenkins로 이름 변경
사용 편의성 사용하기 쉬움 초보자에게는 복잡할 수 있음
호스팅 내부 및 외부 호스팅 지원 내부 및 외부 호스팅 지원
전제 조건 Node.JS, Git, Ruby, Go Java 런타임 환경

GitLab CI vs. Jenkins: 세부 비교

GitLab과 Jenkins는 유사점을 공유하지만, CI/CD 프로세스 관리에 영향을 미치는 뚜렷한 차이점이 있습니다. 주요 차이점은 다음과 같습니다.

아키텍처

Jenkins는 마스터-워커 아키텍처를 사용하여 빌드를 관리합니다.

  • Jenkins 마스터는 빌드 작업을 예약하고 실제 실행을 위해 작업자에게 배포합니다. 또한 작업자의 상태를 모니터링하고 모든 빌드 결과를 웹 대시보드에 수집 및 집계합니다.
  • Jenkins 작업자는 원격 시스템에서 실행되는 Java 실행 파일입니다. 빌드 에이전트라고도 하며, 마스터의 모든 요청을 수신하고 실행합니다. 최대 100개 이상의 노드를 가질 수 있으며 필요에 따라 작업자를 추가하거나 제거할 수 있습니다.

GitLab CI는 리포지토리 관리, 병합 요청 등을 위한 웹 기반 인터페이스인 GitLab의 일부입니다. GitLab CI는 다음과 같은 다양한 구성 요소로 구성됩니다:

  • GitLab CI/CD 도구는 빌드를 관리합니다.
  • GitLab Runner는 모든 CI 작업을 실행합니다. 이 경량 프로세스는 클라우드 또는 컴퓨터에서 실행할 수 있습니다.
  • CI/CD 파이프라인 구성은 .gitlab-ci.yml 파일에 정의되어 있습니다. 이 파일은 파이프라인의 모든 작업, 단계 및 단계를 정의합니다.

플러그인

Jenkins는 1800개 이상의 커뮤니티 기여 플러그인을 제공합니다. 이러한 플러그인은 프로젝트 빌드, 배포 및 자동화와 같은 다양한 영역을 다룹니다. 사용자는 CI/CD 파이프라인을 사용자 정의하고 Jenkins의 기능을 확장할 수 있습니다.

개발자는 Jenkins의 광범위한 문서를 통해 사용자 지정 플러그인을 만들 수 있습니다. 또한 플러그인을 빌드하고 Jenkins 디렉토리에 추가할 수 있습니다. Jenkins는 플러그인 빌드를 지원하는 크고 활발한 커뮤니티를 보유하고 있습니다.

GitLab CI는 기능 향상을 위해 외부 서비스와 연결하거나 통합할 수 있습니다. 플러그인/확장 라이브러리는 Jenkins에 비해 작지만 빠르게 성장하고 있습니다. GitLab CI는 GitLab의 일부이므로 많은 기능이 내장되어 있습니다.

사용자는 .gitlab-ci.yml 파일을 사용하여 작업 흐름을 사용자 정의/구성할 수 있습니다. 모든 작업, 단계 및 단계를 지정할 수 있습니다.

파이프라인

Jenkins에서는 선언적 파이프라인 구문과 스크립팅된 파이프라인 구문을 모두 사용할 수 있습니다. 웹 UI 또는 Jenkinsfile과 함께 두 가지 접근 방식 중 하나를 사용할 수 있으며, 후자가 선호됩니다. 소스 코드를 저장하는 리포지토리 내에 파이프라인을 Jenkinsfile로 저장할 수 있습니다. Jenkins는 실행을 모니터링하고 시각화할 수 있는 웹 기반 GUI를 내장하고 있습니다.

GitLab CI는 모든 파이프라인을 정의하는 .gitlab-ci.yml 파일을 사용합니다. 이 YML 기반 구성 파일은 프로젝트의 루트 디렉토리에 저장됩니다. .gitlab-ci.yml은 가장 일반적인 CI/CD 작업을 처리하는 다양한 명령과 미리 정의된 키워드를 포함한 간단한 구문으로 유명합니다. GitLab CI는 소스 코드 관리, 이슈 추적, 코드 검토, 병합 요청 등 다른 GitLab 기능과 통합되어 있습니다.

젠킨스 설치 방법

PC에 Jenkins를 설치하기 전에 JRE(Java Runtime Environment)가 필요합니다. 운영 체제에 따라 공식 웹 사이트에서 Java를 다운로드하십시오. 여기서는 Ubuntu를 사용하여 설치 과정을 설명합니다.

다른 운영 체제를 사용하는 경우, Jenkins 설치에 대한 관련 문서를 참고하여 단계를 따르시기 바랍니다.

Ubuntu의 경우 다음 단계를 따르십시오:

1단계: JRE가 설치되어 있는지 확인합니다. 다음 명령을 실행합니다:

java -version

설치되어 있다면 다음과 유사한 출력이 나타납니다:

여기서는 "17.0.6" 버전을 설치했지만, 더 높은 버전을 사용할 수 있습니다.

2단계: 다음 명령을 사용하여 GPG 키를 시스템으로 가져옵니다:

curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null

3단계: 다음 명령을 사용하여 Jenkins의 소프트웨어 저장소를 추가합니다:

echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null

4단계: 다음 명령을 사용하여 시스템을 업데이트합니다:

sudo apt update

5단계: 다음 명령을 사용하여 Jenkins를 설치합니다:

sudo apt install jenkins -y

6단계: 다음 명령을 사용하여 Jenkins가 설치되었는지 확인합니다:

sudo systemctl status jenkins

설치된 경우 다음과 유사한 내용이 표시됩니다:

종료하고 다음 단계로 이동하려면 키보드에서 ctrl+z를 누르십시오.

7단계: 시스템에서 방화벽과 Jenkins를 수정합니다. 다음 명령을 사용하십시오:

sudo ufw allow 8080

8단계: 상태 확인

sudo ufw status

9단계: 이전 단계에서 상태가 "비활성"이면 다음 명령을 사용하여 활성화합니다:

sudo ufw enable

10단계: 브라우저에 다음 주소를 입력하여 Jenkins를 엽니다:

http://localhost:8080

11단계: 다음 명령을 실행하여 "관리자 암호"를 얻습니다:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

12단계: Jenkins 잠금 해제

터미널에 표시된 암호를 복사하여 10단계에서 연 "관리자 암호" 대화 상자에 붙여넣고 '계속'을 클릭합니다.

새 창에 플러그인을 설치하라는 메시지가 표시됩니다. 현재 많은 플러그인이 필요하지 않으므로 기본 플러그인을 선택하고 다음 단계로 이동할 수 있습니다.

13단계: 계정을 만들고 '저장 및 계속'을 클릭합니다.

14단계: 구성 설정을 완료하고 Jenkins 사용을 시작합니다.

GitLab CI 설치 방법

GitLab CI는 GitLab의 일부입니다. GitLab CI를 사용하려면 먼저 GitLab으로 작업을 보내기 전에 모든 작업을 실행하는 에이전트인 GitLab Runner를 설치해야 합니다.

프로세스를 설명하기 위해 Ubuntu를 사용합니다. 다른 운영 체제를 사용하는 경우 공식 문서를 참조하십시오. Ubuntu의 경우 다음 단계를 따르십시오:

1단계: 시스템 업데이트 및 구성

sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl

업데이트 알림을 받기 위한 이메일 솔루션을 구성하거나 이 단계를 건너뛸 수 있습니다.

2단계: GitLab 패키지 저장소 추가

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash

3단계: GitLab 계정 구성

GitLab 호스팅을 위한 다양한 옵션이 있습니다. 선택에 따라 지침을 따르십시오.

4단계: 호스트 이름을 찾고 로그인합니다. 터미널에서 다음 명령을 실행하여 비밀번호를 얻습니다.

/etc/gitlab/initial_root_password 

선택 사항: GitLab에서 제품 업데이트 및 뉴스를 받도록 통신 기본 설정을 설정합니다.

Jenkins의 한계

  • Jenkins는 대규모 프로젝트에 대해 설정하기가 복잡할 수 있습니다.
  • 제대로 구성되지 않은 경우 Jenkins는 보안 공격에 취약할 수 있습니다.
  • Jenkins를 사용하는 동안 대규모 프로젝트를 확장하기 어려울 수 있습니다.
  • Jenkins는 수많은 동시 빌드를 실행할 때 많은 리소스를 소비할 수 있습니다.

Gitlab CI의 한계

  • GitLab CI는 대규모 프로젝트의 경우 복잡할 수 있습니다.
  • GitLab에 종속적입니다.
  • 확장성이 대규모 프로젝트에서 문제가 될 수 있습니다.
  • 플러그인 생태계가 Jenkins에 비해 작습니다.

저자의 의견

GitLab CI와 Jenkins는 모두 소프트웨어 개발 수명 주기에서 뛰어난 도구입니다. 좀 더 성숙한 플랫폼과 사용자 정의에 대한 완벽한 제어를 원한다면 Jenkins를 선택하겠습니다. 반면에 사용자 인터페이스가 중요하고 GitLab과의 통합이 필요하다면 GitLab CI를 선택할 것입니다.

이제 GitLab CI와 Jenkins의 차이점을 어느 정도 이해하셨을 것입니다. 두 도구 모두 유사한 기능을 수행하도록 설계되었지만, 기능과 기능을 구현하는 방식에는 차이가 있습니다. 어떤 도구를 선택할지는 프로젝트의 특성, 기술, 개인적인 선호도에 따라 달라질 수 있습니다.

참고로 다음 Jenkins 호스팅 플랫폼도 고려해 볼 수 있습니다.

저자
Korea

기술 트렌드와 실용적인 팁을 전하는 लेखक입니다.