현대오토에버 모빌리티 sw 스쿨 3기 [클라우드]/Jenkins

Jenkins 기초 지식 & 설치 방법

맹꽁이+ 2026. 3. 19. 09:32

JENKINS

1. 개요

Jenkins 는 자바로 작성된 오픈소스 자동화 서버이다.

Apache Tomcat 처럼 servlet container 내부에서 실행되는 서버 시스템으로, 매우 활방한 커뮤니티의 참여와 방대한 플러그인 덕분에 지속적 통합(CI) 및 지속적 인도(CD) 프로세스를 구축하는데 많이 사용하는 도구 중 하나이다.

일반적인 CI 도구들에 비해서 많은 기능과 확장성 덕분에 널리 사용되는 프로그램 중 하나이지만, 무겁다는 단점이 있다.

 

특징

  1. 다양한 프로그래밍 언어를 지원한다.
  2. 플러그인을 통한 확장이 많다.
  3. 이식성: Java로 개발돼서 대부분의 운영체제에서 사용이 가능하다.
  4. WAR 파일이나 Docker Image, 윈도우나 Mac OS 또는 리눅스용 바이너리도 제공하기 때문에 편리하다.
  5. 대부분의 버전 관리 시스템을 지원한다.
  6. 분산 처리 지원: 마스터/에이전트 모드를 지원하므로 여러 컴퓨터로 노드를 분산해 실행하는 것이 가능하고 다른 기종에서도 실행된다.
  7. 사용법이 단순하다.

Architecture

Master&Agent

Jenkins를 운영하다 보면 예상보다 빠르게 과부하 상황이 발생하는데 용량이 크지 않은 마이크로 서비스를 빌드하는데 몇분씩 걸리기도 하는데 그러다보니 커밋을 자주하는 팀은 Jenkins 인스턴스가 죽는 일이 빈번히 발생하기 때문에 아주 소규모의 프로젝트가 아니라면 빌드작업을 에이전트 인스턴스에 위임해서 실행하는 방식을 이용한다.

현재 Jenkins를 실행하고 있는 Jenkins 마스터가 있고 실제 빌드 작업은 에이전트에 위임해서 실행하는 방식을 사용한다.

 

동작 방식

Trigger → Jenkins Master → Jenkins Agent → 알림

 

Jenkins Master의 작업

빌드 시작 명령을 받음: Github에 커밋이 발생한 직후

알림을 전송: 빌드가 실패하면 이메일이나 슬랙 메시지로 알림

클라이언트와 통신을 하고 HTTP 요청을 처리

에이전트에서 실행 중인 작업의 우선순위 조정 등의 빌드 환경을 관리

 

수직적 확장

마스터의 부하 증가에 대응해 마스터 시스템에 자원을 추가하는 방식

신규 프로젝트가 생길 때마다 RAM과 CPU를 추가하고 외장 하드 드라이브도 확장하는 것

Jenkins Master를  단 한 대의 초 고성능의 하드웨어서 운영한다면 유지보수 측면에서는 매우 효율적: 모든 업그레이드와 스크립트, 보안 설정이나 사용자 관리, 플러그인 설치 등의 작업을 단 한 곳에서만 하면 되기 때문

 

수평적 확장

조직이 늘어날 때마다 마스터 인스턴스의 수량을 늘려가는 방식

팀 별로 한 대 씩의 마스터를 둘 수 있다면 에이전트는 필요없음

프로젝트 간의 통합 자동화가 어렵고 각 팀마다 jenkins를 유지보수하는 시간이 필요

장점

- 마스터 역할을 컴퓨터의 하드웨어가 고 사양일 필요가 없음

- 팀마다 다른 설정을 할 수 있음

- 팀 전용 마스터 인스턴스가 있으므로 팀 워크와 업무 효율이 향상

마스터 인스턴스가 있으므로 팀 워크와 업무 효율이 향사

마스터 인스턴스 하나에 문제가 생겨도 다른 팀에 영향을 주지 않음

인프라를 표준 인프라와 필수 인프라로 구분해 구성할 수 있음

 

테스크 인스턴스 & 프로덕션 인스턴스

넷플릭스가 테스트 인스턴스와 프로덕션 인스턴스를 별도로 운영

 

 

2. Jenkins 설치 방법

하드웨어 요구 사항

- 256MB 이상의 메모리 용량

1GB 이상의 하드 디스크 용량을 가져야 하는데 도커를 사용하는 경우는 10GB이상을 추천

 

소프트웨어 요구 사항

- Java (Jenkins 버전에 따른 Java 버전: https://get.jenkins.io/war-stable)

 

설치 방법

- Servlet: Jenkins는 Java로 작성되어 있고 war 형식의 웹 어플리케이션으로 배포되는 애플리케이션 서버 전용 솔루션이므로 모든 애플리케이션을 Servlet으로 배포 가능

 

Application: Jenkins WAR 파일을 Jetty 애플리케이션 서버를 포함하고 있으므로 java 명령으로 직접 실행할 수 있는데 이때 필요한 것은 JRE뿐이므로 베어메탈 서버를 이용하거나 한 시스템에 여러 Jenkins 인스턴스를 설치해야 하는 경우 이 방식을 선택

 

- 전용 패키지: Windows 용 MSI, Mac 용 Homebrew 패키지, 우분투용 deb 패키지 등의 형태로 제공되므로 이를 이용해서 설치

- Docker: 가장 간단한 설치 방식

- Kubenetes: Helm Chart와 Kubenetes Operator를 제공하므로 Kubenetes에 설치해서 사용 가능

- SaaS: Jenkins는 여러 클라우드 플랫폼에서 SaaS 형태로 호스팅

 

Docker에서 설치

- 컨테이너 생성: docker run --name 이름 -p 호스트포트:8080 -p 호스트포트:50000 --restart=on-failure -v 호스트 볼륨:/var/jenkins_home jenkins/jenkins

 

docker run --name jenkins -p 8080:8080 -p 50000:50000 --restart=on-failure -v C:\jenkins:/var/jenkins_home jenkins/jenkins

 

- 로그를 확인해서 초기 비밀번호 확인: docker logs jenkins

9e5702e55d9443c8958c02536d91744a

 

- 로그에서 확인이 안되면

 

docker exec -it jenkins /bin/bash

만약 jenkins가 exited 돼서 안 나오면

docker start jenkins 다시 시작하고 

docker exec -it jenkins /bin/bash 다시 입력

 

cat /var/jenkins_home/secrets/initialAdminPassword

 

브라우저에서 localhost:8080으로 접속하고 초기 비밀번호를 입력한 후 기본 플러그인을 설치

 

3. Plug IN

Jenkins는 소프트웨어 개발 프로세스의 여러 단꼐를 자동화하는 도구로 Source Code Repository에서 Checkout, Complie, Unit Rest, Packaging, Deploy등의 기능을 제공

이와 같은 작업들을 위해서는 SCM, Test Tool, Bulid Tool등 다양한 종류의 Tool을 사용해야 함

이러한 도구들과의 인터페이스가 플러그인

 

자주 사용하는 플러그인

  1. Git
  2. Maven 빌드 도구
  3. Email Extension Plugin