프로그래밍

리눅스 한 학기 살기 - 6주차

kugorang 2025. 4. 22. 22:35
728x90

들어가며

Jenkins on Docker

이번 주차는 Jenkins라는 CI/CD 도구에 대해 다룬다. 예전에도 Jenkins를 로컬에 설치해서 몇 번 사용했었는데, 가끔 전역적으로 설치해서 발생하는 문제(ex. 8080 포트 겹침 등)들로 인해 귀찮은 작업이 많아 Docker를 이용하면 조금 더 편하게 사용할 수 있을 거란 생각에 Docker와 Jenkins를 같이 사용하게 되었다.

 

본격적으로 Jenkins를 Docker로 설치해서 사용하기 전에 Jenkins에 대해 알아보고 이후 Docker에 설정하는 방법을 정리하겠다.

 

Jenkins란?

Jenkins는 소프트웨어 개발 프로세스의 빌드, 테스트, 배포 단계를 자동화하는 데 널리 사용되는 오픈 소스 자동화 서버이다.1 Java로 작성되었으며, 지속적 통합(Continuous Integration, CI) 및 지속적 전달/배포(Continuous Delivery/Deployment, CD) 워크플로우를 구현하는 데 핵심적인 역할을 한다.2 Jenkins는 파이프라인이라는 CI/CD 워크플로우를 통해 개발팀이 코드 변경 사항을 더 빠르고 안정적으로 통합하고 배포할 수 있도록 지원한다.1

 

이 글은 Jenkins의 정의와 핵심 기능, 특히 CI/CD 자동화 측면을 살펴본다. 또한 Ubuntu 24.04 LTS 환경에서 Docker 컨테이너 기술을 사용하여 Jenkins를 설치하고 초기 설정하는 구체적인 방법을 단계별로 안내한다. Docker를 활용할 때의 이점과 설치 후 기본적인 사용 예시를 포함하여 Jenkins를 효과적으로 시작하는 데 필요한 정보를 제공하는 것을 목표로 한다.

 

Jenkins: 핵심 개념 및 기능

Jenkins는 2004년 Kohsuke Kawaguchi에 의해 Hudson이라는 이름으로 시작되었으며, 개발자가 코드를 커밋하기 전에 테스트하여 빌드 실패를 방지하려는 목적으로 만들어졌다.3 현재는 CI 서버를 넘어 전체 소프트웨어 전달 파이프라인을 조율하는 핵심 도구로 발전했다.4

 

지속적 통합(CI) 및 지속적 전달/배포(CD)

CI/CD는 현대 소프트웨어 개발의 핵심 관행으로, 효율성과 품질 향상을 목표로 한다.2

  • 지속적 통합 (Continuous Integration, CI): 여러 개발자가 작업한 코드 변경 사항을 중앙 리포지토리에 자주 병합(통합)하는 프로세스이다.2 각 통합 시 자동화된 빌드 및 테스트가 실행되어 문제점을 조기에 발견하고 수정할 수 있다.2 이를 통해 버그와 충돌을 최소화하고 코드 품질을 유지 관리하기 용이해진다.2 Jenkins는 코드 커밋과 같은 이벤트를 감지하거나 주기적으로 리포지토리를 확인하여 CI 프로세스를 자동 트리거할 수 있다.5
  • 지속적 전달/배포 (Continuous Delivery/Deployment, CD): CI의 원칙을 확장하여, 성공적으로 테스트된 코드를 프로덕션 환경까지 자동으로 전달하거나 배포하는 것을 목표로 한다.2
    • 지속적 전달(Continuous Delivery): 모든 코드 변경 사항이 테스트를 통과한 후 프로덕션과 유사한 환경에 자동으로 릴리스 준비 상태가 되도록 보장한다. 실제 프로덕션 배포는 수동 승인이 필요할 수 있다.6
    • 지속적 배포(Continuous Deployment): CI 파이프라인에서 성공적으로 테스트된 코드가 사람의 개입 없이 자동으로 실제 프로덕션 환경에 배포된다.2 Jenkins는 다양한 배포 전략(예: Blue-green, Canary)을 자동화하는 데 사용될 수 있다.6

 

CI/CD는 단순히 도구를 도입하는 것을 넘어, 개발 문화와 관행의 변화를 요구한다.7 Jenkins는 이러한 CI/CD 관행을 구현하고 자동화하는 강력한 도구 역할을 한다.8

 

주요 Jenkins 기능

Jenkins는 다음과 같은 강력한 기능들을 제공하여 CI/CD 파이프라인 구축 및 자동화를 지원한다.

  • 자동화: 빌드, 테스트, 배포 등 반복적인 작업을 자동화하여 수동 오류를 줄이고 시간을 절약한다.4 Jenkins는 스케줄 기반 작업 실행(Cron과 유사)도 가능하다.8
  • 플러그인 생태계: 2,000개 이상의 방대한 플러그인을 통해 Git, Maven, Docker, Kubernetes 등 거의 모든 CI/CD 도구 체인과 통합할 수 있다.4 필요한 기능이 없다면 직접 플러그인을 개발하여 확장할 수도 있다.6
  • 확장성(Extensibility): 플러그인 아키텍처를 통해 Jenkins의 기능을 거의 무한하게 확장할 수 있다.4
  • 분산 빌드(Distributed Builds): 작업을 여러 에이전트(Agent, 이전 명칭 Slave) 머신에 분산하여 여러 플랫폼에서 동시에 빌드, 테스트, 배포를 수행하고 처리 속도를 높일 수 있다.4 Jenkins 컨트롤러(Controller, 이전 명칭 Master)는 에이전트를 관리하고 작업을 조율한다.9
  • 파이프라인 애즈 코드(Pipeline as Code): Jenkins Pipeline은 플러그인 모음으로, 전체 빌드/테스트/배포 파이프라인을 코드로 정의(주로 Groovy 기반 DSL 사용)할 수 있게 해준다.2 이를 통해 파이프라인을 버전 관리하고, 재사용하며, 검토하고, 감사할 수 있다.6 Jenkinsfile이라는 텍스트 파일에 파이프라인을 정의하여 소스 코드와 함께 관리하는 것이 일반적인 모범 사례이다.10
  • 쉬운 설정 및 구성: 웹 인터페이스를 통해 쉽게 설정하고 구성할 수 있으며, 실시간 오류 확인 및 내장 도움말 기능을 제공한다.4
  • 성숙도 및 커뮤니티: 오랜 역사와 성숙도를 바탕으로 안정적이며, 방대하고 활발한 커뮤니티를 통해 지원, 경험 공유, 모범 사례 등을 얻을 수 있다.6

 

Docker를 활용한 Jenkins 실행의 이점

Jenkins를 Docker 컨테이너 내에서 실행하면 여러 가지 이점을 얻을 수 있다. 이는 개발 및 운영 환경에서 Jenkins를 더 효율적이고 안정적으로 관리하는 데 도움이 된다.

 

격리 및 일관성 (Isolation and Consistency)

Docker 컨테이너는 Jenkins 애플리케이션과 그 의존성을 격리된 환경에 패키징한다.11 이를 통해 호스트 시스템이나 다른 애플리케이션과의 충돌을 최소화하고, 개발, 테스트, 프로덕션 등 다양한 환경에서 동일한 실행 환경을 보장한다.5 "내 컴퓨터에서는 작동하는데"와 같은 문제를 제거하여 환경 차이로 인한 오류를 줄일 수 있다.5

 

이식성 및 자원 효율성 (Portability and Resource Efficiency)

Docker 컨테이너는 기존 가상 머신(VM)보다 훨씬 가볍고 자원을 적게 소모한다.11 따라서 단일 호스트에서 여러 Jenkins 인스턴스를 실행하여 자원 사용률을 최적화할 수 있다.11 또한, Docker 이미지는 어떤 Docker 호스트 환경으로든 쉽게 이동할 수 있어 개발 환경에서 프로덕션 환경으로 Jenkins 설정을 이전하는 것이 간편하다.11

 

확장성 및 오케스트레이션 (Scalability and Orchestration)

작업 부하가 증가할 때 Docker를 사용하면 추가 Jenkins 컨테이너(특히 에이전트)를 신속하게 생성하여 CI/CD 파이프라인의 처리 능력을 쉽게 확장할 수 있다.11 Docker Compose와 같은 도구를 사용하면 Jenkins 컨트롤러, 에이전트 및 기타 필요한 서비스(예: 데이터베이스)를 포함하는 다중 컨테이너 애플리케이션을 정의하고 관리하기 용이하다.11

 

쉬운 배포 및 관리 (Ease of Deployment and Management)

Docker Hub에서 제공되는 공식 Jenkins 이미지를 사용하면 몇 가지 간단한 명령어로 Jenkins를 빠르게 배포할 수 있다.11 Jenkins 버전 업데이트나 플러그인 추가/변경이 필요할 경우, 새로운 설정이 포함된 Docker 이미지를 빌드하고 기존 컨테이너를 교체하는 방식으로 간편하게 관리할 수 있다.12 Jenkins 구성을 코드로 관리(Configuration as Code)하는 것과 결합하면 전체 Jenkins 설정을 버전 관리하고 재현 가능하게 만들 수 있다.5

 

사전 준비: Ubuntu 24.04 LTS에 Docker Engine 설치하기

Jenkins를 Docker 컨테이너로 실행하기 위한 첫 번째 단계는 호스트 시스템인 Ubuntu 24.04 LTS에 Docker Engine을 설치하는 것이다. 다음은 공식 Docker apt 리포지토리를 사용하여 설치하는 권장 절차이다.13

 

이전 버전 제거 (선택 사항)

시스템에 오래되거나 비공식적인 Docker 패키지가 설치되어 있다면 충돌을 피하기 위해 먼저 제거하는 것이 좋다.13

sudo apt-get remove docker docker-engine docker.io containerd runc

 

Docker apt 리포지토리 설정

공식 Docker 리포지토리를 사용하면 최신 버전의 Docker를 안정적으로 설치하고 업데이트할 수 있다.13

  1. 패키지 인덱스 업데이트 및 필수 패키지 설치:
  2. sudo apt-get update sudo apt-get install ca-certificates curl
  3. Docker 공식 GPG 키 추가: 패키지의 무결성을 확인하기 위해 Docker의 GPG 키를 시스템에 추가한다.13
  4. # 키링 디렉토리 생성 (존재하지 않을 경우) sudo install -m 0755 -d /etc/apt/keyrings # GPG 키 다운로드 sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc # 키 파일 권한 설정 sudo chmod a+r /etc/apt/keyrings/docker.asc
  5. Docker 리포지토리 추가: apt 소스 목록에 Docker 리포지토리를 추가한다.13
  6. echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  7. 패키지 인덱스 다시 업데이트: 새로 추가된 Docker 리포지토리 정보를 반영한다.
  8. sudo apt-get update

 

Docker 패키지 설치

이제 Docker Engine, CLI, containerd 및 필수 플러그인(Docker Compose 포함)을 설치한다.13

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

설치가 완료되면 Docker 서비스가 자동으로 시작되고 시스템 부팅 시 활성화된다.14

 

루트가 아닌 사용자로 Docker 관리 (권장)

기본적으로 Docker 명령어는 root 사용자나 sudo 권한이 있는 사용자만 실행할 수 있다. 매번 sudo를 입력하는 것을 피하고 일반 사용자 계정으로 Docker를 사용하려면 해당 사용자를 docker 그룹에 추가해야 한다.13

  1. docker 그룹에 현재 사용자 추가:
  2. sudo usermod -aG docker $USER
  3. 그룹 변경 사항 적용: 변경 사항을 적용하려면 로그아웃 후 다시 로그인하거나 다음 명령어를 실행하여 현재 셸에 새 그룹 멤버십을 적용한다.
  4. newgrp docker

이제 sudo 없이 docker 명령어를 사용할 수 있다. 간단한 테스트로 설치를 확인할 수 있다13:

docker run hello-world

이 명령어가 성공적으로 실행되면 Docker Engine 설치가 완료된 것이다.

 

Docker를 이용한 Jenkins 설치 및 실행

Docker Engine이 준비되었으므로, 이제 공식 Jenkins Docker 이미지를 사용하여 Jenkins 컨테이너를 실행할 차례이다.

 

Jenkins LTS Docker 이미지 선택 및 가져오기

Jenkins는 안정적인 LTS(Long-Term Support) 릴리스와 최신 기능을 포함하는 Weekly 릴리스를 제공한다. 일반적으로 안정성이 중요한 운영 환경에서는 LTS 버전을 사용하는 것이 권장된다.11

 

Jenkins Docker 이미지는 jenkins/jenkins라는 이름으로 Docker Hub에 공식적으로 게시된다.15 LTS 이미지 태그는 보통 lts 또는 특정 JDK 버전을 포함하는 형태(예: lts-jdk17, lts-jdk21)로 제공된다.15 Jenkins는 Java 기반 애플리케이션이므로1, 이미지에 포함된 JDK 버전은 중요한 고려 사항이다.

 

최신 LTS 이미지 태그 확인: Jenkins 프로젝트에서 권장하는 최신 LTS 이미지 태그는 시간이 지남에 따라 변경될 수 있다. 따라서 설치 시점에는 Docker Hub의 jenkins/jenkins 페이지 또는 공식 Jenkins Docker 문서를 참조하여 현재 권장되는 LTS 태그(예: lts-jdk17, lts-jdk21 등)를 확인하는 것이 중요하다.15

 

이미지 가져오기 (docker pull): 확인된 최신 LTS 태그를 사용하여 이미지를 로컬 시스템으로 내려받는다. 예를 들어, lts-jdk17 태그를 사용한다면 다음과 같이 실행한다:

docker pull jenkins/jenkins:lts-jdk17

 

Jenkins 컨테이너 실행 (docker run)

docker run 명령어를 사용하여 내려받은 Jenkins 이미지를 기반으로 컨테이너를 실행한다. 안정적이고 지속적인 Jenkins 운영을 위해 몇 가지 중요한 옵션을 설정해야 한다.11

권장 docker run 명령어:

docker run \
  --name myjenkins \
  -d \
  --restart=on-failure \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts-jdk17 # 실제 pull 받은 최신 LTS 태그로 교체

명령어 옵션 설명:

  • --name myjenkins: 컨테이너에 "myjenkins"라는 고유한 이름을 부여한다. 이 이름을 사용하여 docker stop myjenkins, docker logs myjenkins 등 후속 명령에서 컨테이너를 쉽게 참조할 수 있다.11
  • -d: 컨테이너를 백그라운드(detached mode)에서 실행한다. 터미널을 계속 사용할 수 있으며, 로그는 docker logs 명령어로 확인한다.11
  • --restart=on-failure: 컨테이너가 오류로 종료되거나 Docker 데몬이 재시작될 경우 자동으로 컨테이너를 다시 시작하도록 설정한다. unless-stopped도 유사하게 사용될 수 있다. Jenkins 서비스의 가용성을 유지하는 데 중요하다.16
  • -p 8080:8080: 호스트 머신의 8080 포트를 컨테이너 내부의 8080 포트에 매핑한다. Jenkins 웹 UI에 접속하기 위한 기본 포트이다.2
  • -p 50000:50000: 호스트 머신의 50000 포트를 컨테이너 내부의 50000 포트에 매핑한다. 이는 TCP 기반의 인바운드 연결을 사용하는 Jenkins 에이전트를 컨트롤러에 연결할 때 사용된다.11 SSH 기반 에이전트만 사용한다면 이 포트 매핑이 필수는 아닐 수 있다.16
  • -v jenkins_home:/var/jenkins_home: jenkins_home이라는 이름의 Docker 볼륨을 생성하고, 이를 컨테이너 내부의 /var/jenkins_home 디렉토리에 마운트한다.11
    • /var/jenkins_home 디렉토리는 Jenkins의 모든 설정, 작업 구성, 플러그인, 빌드 로그, 아티팩트 등 중요한 데이터가 저장되는 위치이다.17
    • 볼륨 사용의 중요성: Docker 볼륨을 사용하면 컨테이너가 중지, 삭제 또는 업데이트되더라도 Jenkins 데이터가 영구적으로 보존된다.11 특히 이름있는 볼륨(named volume) 사용이 강력히 권장된다. 이는 Docker가 볼륨의 생명주기를 관리하고, 플랫폼 독립적이며, 성능상 이점이 있고, 호스트 파일 시스템의 권한 문제(UID/GID 불일치 등)를 피할 수 있기 때문이다.18 호스트 디렉토리를 직접 마운트하는 바인드 마운트(-v /host/path:/var/jenkins_home) 방식도 가능하지만18, 호스트 디렉토리 권한 관리가 필요하고 이식성이 떨어져 일반적으로 권장되지 않는다.18
  • jenkins/jenkins:lts-jdk17: 실행할 Docker 이미지와 태그를 지정한다. 앞서 docker pull로 내려받은 실제 이미지 태그를 사용해야 한다.15

 

권장 docker run 옵션 요약

다음 표는 Jenkins 컨테이너 실행 시 권장되는 주요 docker run 옵션을 요약한 것이다.

플래그 목적 예시 값 참조 자료
--name 컨테이너에 이름 할당 myjenkins 11
-d 백그라운드(detached) 모드로 실행 N/A 11
--restart 자동 재시작 정책 설정 on-failure, unless-stopped 16
-p 호스트-컨테이너 포트 매핑 (웹 UI) 8080:8080 2
-p 호스트-컨테이너 포트 매핑 (에이전트 TCP) 50000:50000 11
-v 영구 데이터 저장을 위한 볼륨 마운트 jenkins_home:/var/jenkins_home 11
Image 실행할 Jenkins 이미지 지정 jenkins/jenkins:lts-jdkXX 15

 

초기 Jenkins 설정 마법사

Jenkins 컨테이너를 처음 실행한 후, 웹 브라우저를 통해 초기 설정을 완료해야 한다.

 

Jenkins 웹 인터페이스 접속

웹 브라우저를 열고 http://<호스트 IP 주소>:8080 또는 로컬에서 실행 중인 경우 http://localhost:8080으로 접속한다.2 컨테이너가 시작되고 Jenkins가 준비되는 데 약간의 시간이 걸릴 수 있으며, 준비가 되면 "Unlock Jenkins" 페이지가 나타난다.19

 

Jenkins 잠금 해제: 초기 관리자 비밀번호 검색

보안을 위해 Jenkins는 초기 설정 시 자동으로 생성된 관리자 비밀번호를 요구한다.19 이 비밀번호는 다음 두 가지 방법 중 하나로 찾을 수 있다.

  1. Docker 로그 확인: 터미널에서 docker logs myjenkins (컨테이너 이름이 myjenkins인 경우) 명령어를 실행한다. 로그 출력 내용 중 별표(***) 사이에 표시된 긴 영숫자 문자열이 초기 비밀번호이다.19
  2. 컨테이너 파일 시스템 접근: docker exec myjenkins cat /var/jenkins_home/secrets/initialAdminPassword 명령어를 실행하여 컨테이너 내부에 저장된 비밀번호 파일을 직접 읽어온다.19 이 파일이 /var/jenkins_home 내에 있다는 사실은 데이터 영속성을 위해 볼륨 마운트가 얼마나 중요한지 다시 한번 보여준다. 이 비밀번호와 이후 모든 설정 정보는 이 볼륨에 저장된다.

찾아낸 비밀번호를 복사하여 웹 페이지의 "Administrator password" 필드에 붙여넣고 "Continue"를 클릭한다.19

 

Jenkins 사용자 정의: 플러그인 설치

다음 단계는 Jenkins의 기능을 확장하는 플러그인을 설치하는 것이다.2 Jenkins의 거의 모든 기능은 플러그인을 통해 제공된다.4

  • Install suggested plugins: 일반적인 사용 사례에 기반한 추천 플러그인 세트를 설치한다. 초보 사용자에게 권장되는 옵션이다.19
  • Select plugins to install: 설치할 플러그인을 직접 선택할 수 있다.19

선택 후 플러그인 설치가 진행되며, 이 과정은 몇 분 정도 소요될 수 있다.19 플러그인은 나중에 "Manage Jenkins" > "Plugins" 메뉴를 통해 언제든지 추가하거나 제거할 수 있다.19

 

첫 번째 관리자 계정 생성

플러그인 설치가 완료되면 첫 번째 관리자 계정을 생성하는 페이지가 나타난다. 사용자 이름, 비밀번호, 전체 이름, 이메일 주소 등 필요한 정보를 입력하고 "Save and Finish"를 클릭한다.19 이 계정은 초기 비밀번호와 연결된 임시 'admin' 사용자를 대체하게 된다.19

 

인스턴스 설정 및 완료

마지막으로 Jenkins URL을 확인하는 페이지가 표시된다. 일반적으로 자동으로 올바르게 설정되지만 (http://<호스트 주소>:<포트>), 필요한 경우 수정할 수 있다.20 "Start using Jenkins" 버튼을 클릭하여 설정을 완료한다.19 간혹 "Jenkins is almost ready!" 메시지가 표시될 수 있으며, 이 경우 "Restart"를 클릭하거나 잠시 후 페이지를 새로고침해야 할 수 있다.19

 

설치 확인 및 기본 사용 예시

초기 설정이 완료되면 Jenkins 대시보드에 로그인하여 설치가 성공적으로 이루어졌는지 확인하고 간단한 작업을 실행해 볼 수 있다.

 

Jenkins 대시보드 로그인

앞서 생성한 관리자 계정의 사용자 이름과 비밀번호를 사용하여 Jenkins에 로그인한다.19 성공적으로 로그인되어 메인 대시보드가 보이면 설치 및 초기 설정이 완료된 것이다.

 

간단한 "Hello World" 작업 생성 및 실행

Jenkins의 기본적인 작동 방식을 확인하기 위해 간단한 작업을 생성하고 실행해 본다. Jenkins는 다양한 유형의 작업(Job 또는 Item)을 지원하는데21, 복잡한 CI/CD 파이프라인은 주로 Pipeline 유형으로 구현하지만22, 여기서는 설치 확인을 위한 간단한 테스트이므로 구성이 더 쉬운 Freestyle project 유형을 사용한다.21

  1. Jenkins 대시보드 왼쪽 메뉴에서 "New Item"을 클릭한다.21
  2. "Enter an item name" 필드에 작업 이름(예: "Hello-World-Freestyle")을 입력한다.21
  3. 프로젝트 유형으로 "Freestyle project"를 선택한다.21
  4. "OK" 버튼을 클릭한다.21
  5. (선택 사항) 작업 설정 페이지에서 "Description" 필드에 설명을 추가한다.21
  6. 페이지를 아래로 스크롤하여 "Build Steps" 섹션으로 이동한다 (일부 문서에서는 "Build" 섹션으로 표기21).
  7. "Add build step" 드롭다운 메뉴를 클릭한다.21
  8. 리눅스 기반 Jenkins 이미지를 사용하므로 "Execute shell"을 선택한다.23 (만약 Windows 기반 이미지를 사용한다면 "Execute Windows batch command"를 선택한다21).
  9. "Command" 텍스트 영역에 다음 명령어를 입력한다:
  10. echo "Hello World from Jenkins Freestyle!"
  11. "Save" 버튼을 클릭하여 설정을 저장한다.21
  12. 생성된 작업 페이지의 왼쪽 메뉴에서 "Build Now"를 클릭하여 작업을 실행한다.21

 

빌드 상태 및 콘솔 출력 검토

작업 페이지의 "Build History" 섹션에서 빌드 실행 기록을 확인할 수 있다. 빌드 번호 옆에 파란색 공 아이콘이 나타나면 빌드가 성공적으로 완료된 것이다.24

  1. "Build History"에서 해당 빌드 번호(예: #1)를 클릭한다.21
  2. 빌드 상세 페이지의 왼쪽 메뉴에서 "Console Output"을 클릭한다.21
  3. 콘솔 출력 화면에 "Hello World from Jenkins Freestyle!" 메시지와 함께 마지막 부분에 "Finished: SUCCESS" 상태가 표시되는지 확인한다.

이 과정까지 성공적으로 완료되었다면, Docker를 이용한 Jenkins 설치 및 기본 실행이 성공적으로 이루어진 것이다.

 

추가 자료 및 다음 단계

이 보고서는 Jenkins를 Docker 환경에 설치하고 기본적인 사용법을 확인하는 과정을 다루었다. Jenkins와 Docker를 더 깊이 있게 활용하기 위해 다음 자료들을 참고할 수 있다.

 

공식 Jenkins 문서

Jenkins의 기능, 설정, 사용법에 대한 가장 정확하고 포괄적인 정보를 제공한다.

 

공식 Docker 문서

Docker 명령어, 개념, 모범 사례에 대한 상세 정보를 제공한다.

 

Jenkins 커뮤니티 자료

전 세계 Jenkins 사용자 및 기여자들과 소통하고 도움을 얻을 수 있는 채널이다.

  • Jenkins 커뮤니티 포럼 (Discourse): 질문, 토론, 정보 공유를 위한 공식 포럼.30 "Using Jenkins" 또는 "Ask a question" 카테고리가 유용하다.31 (URL: https://community.jenkins.io/)
  • 메일링 리스트, 채팅 (Gitter 등): 커뮤니티와의 실시간 또는 비동기 소통 채널.30

커뮤니티는 문제 해결, 모범 사례 학습, 새로운 기능 토론 등에 매우 유용한 자원이다.4

 

고급 Jenkins 기능 탐색

기본 설치 및 사용법에 익숙해졌다면 다음과 같은 고급 주제들을 탐색해 볼 수 있다.

  • Pipeline 작업 생성: 선언형(Declarative) 또는 스크립트형(Scripted) 파이프라인 작성.10
  • 빌드 에이전트 구성: 다양한 유형의 에이전트(SSH, Docker 등) 설정 및 관리.9
  • 플러그인 활용: 수많은 플러그인을 탐색하고 활용하여 Jenkins 기능 확장.4
  • 보안 설정: Jenkins 접근 제어 및 보안 강화 방안.25
  • Job DSL: 작업을 코드로 정의하고 관리하는 고급 기법.26

 

마치며

지금까지 Jenkins와 Docker에 Jenkins를 설정하는 방법에 대해 알아보았다. Jenkins는 CI/CD 파이프라인 자동화를 위한 강력하고 유연한 오픈 소스 도구이다. Docker를 활용하여 Jenkins를 설치하면 환경 격리, 일관성, 이식성, 쉬운 관리 등의 이점을 얻을 수 있어 현대적인 개발 환경에 매우 적합하다.

 

이 글에서는 Ubuntu 24.04 LTS 환경에서 Docker를 사용하여 Jenkins LTS 버전을 설치하고, 초기 설정을 완료하며, 간단한 Freestyle 작업을 통해 설치를 확인하는 과정을 상세히 안내했다. 특히, Docker Engine 설치, 공식 Jenkins 이미지 사용, docker run 명령어의 주요 옵션(포트 매핑, 이름있는 볼륨 사용, 재시작 정책 등) 설정, 그리고 초기 웹 기반 설정 마법사 단계를 명확히 설명했다.

 

제시된 단계와 권장 사항을 따르면 사용자는 안정적이고 효율적인 Jenkins 환경을 Docker 기반으로 신속하게 구축할 수 있다. 여기서 더 나아가 공식 문서와 커뮤니티 자료를 활용하여 Pipeline 작성, 에이전트 구성, 다양한 플러그인 활용 등 Jenkins의 풍부한 기능을 탐색하고 실제 프로젝트에 적용함으로써 소프트웨어 개발 및 배포 프로세스를 크게 개선할 수 있을 것이다.

 

참고 자료

1 www.techtarget.com, https://www.techtarget.com/searchsoftwarequality/definition/Jenkins
2 CICD with Jenkins - BrowserStack, https://www.browserstack.com/guide/ci-cd-with-jenkins
3 What is Jenkins? A Guide to CI/CD | CloudBees, https://www.cloudbees.com/jenkins/what-is-jenkins
4 Jenkins, https://www.jenkins.io/
5 Mastering Docker and Jenkins: Build Robust CI/CD Pipelines Efficiently, https://www.docker.com/blog/docker-and-jenkins-build-robust-ci-cd-pipelines/
6 CI/CD With Jenkins: A Gentle Introduction | Spot.io, https://spot.io/resources/ci-cd/ci-cd-with-jenkins-a-gentle-introduction/
7 ELI5: What is CI/CD and Why do we need them? : r/devops - Reddit, https://www.reddit.com/r/devops/comments/t5nufe/eli5_what_is_cicd_and_why_do_we_need_them/
8 Jenkins CI or CI/CD : r/devops - Reddit, https://www.reddit.com/r/devops/comments/x3bhk4/jenkins_ci_or_cicd/
9 What Is Jenkins and How Does it Work? Intro and Tutorial - Codefresh, https://codefresh.io/learn/jenkins/
10 Pipeline - Jenkins, https://www.jenkins.io/doc/book/pipeline/
11 Why Run Jenkins In A Docker Container - Restack, https://www.restack.io/p/advanced-docker-networking-strategies-answer-jenkins-docker
12 How to manage Jenkins Docker container lifecycle | LabEx, https://labex.io/tutorials/jenkins-how-to-manage-jenkins-docker-container-lifecycle-414503
13 Ubuntu | Docker Docs, https://docs.docker.com/engine/install/ubuntu/
14 How to Install Docker on Ubuntu – Step-by-Step Guide | DigitalOcean, https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04
15 jenkins/jenkins - Docker Image - Docker Hub, https://hub.docker.com/r/jenkins/jenkins/
16 jenkinsci/docker: Docker official jenkins repo - GitHub, https://github.com/jenkinsci/docker
17 Image Layer Details - jenkins/jenkins:2.440.1-lts-jdk21 | Docker Hub, https://hub.docker.com/layers/jenkins/jenkins/2.440.1-lts-jdk21/images/sha256-cb29bf607cef46fb48fcc9f123947ca11a816678363724dc2aedf5e8972a0a8a
18 jenkins - Official Image | Docker Hub, https://hub.docker.com/_/jenkins
19 Docker - Jenkins, https://www.jenkins.io/doc/book/installing/docker/
20 Running Jenkins and Persisting state locally using Docker - Rangle, https://rangle.io/blog/running-jenkins-and-persisting-state-locally-using-docker-2
21 Jenkins Build: Set Up Freestyle Project in Jenkins {Step-by-Step} - phoenixNAP, https://phoenixnap.com/kb/jenkins-build-freestyle-project
22 Getting started with Pipeline - Jenkins, https://www.jenkins.io/doc/book/pipeline/getting-started/
23 How To Create & Run A Job In Jenkins Using Jenkins Freestyle Project? - LambdaTest, https://www.lambdatest.com/blog/jenkins-freestyle-project/
24 Jenkins Pipeline - Hello World - Code Maven, https://code-maven.com/jenkins-pipeline-hello-world
25 Jenkins Handbook, https://www.jenkins.io/doc/book/
26 Pipeline as Code with Jenkins, https://www.jenkins.io/solutions/pipeline/
27 Reference - Docker Docs, https://docs.docker.com/reference/
28 How to Install Docker on Ubuntu 22.04 and 24.04 - phoenixNAP, https://phoenixnap.com/kb/install-docker-ubuntu
29 Docker Docs, https://docs.docker.com/
30 Get connected with the Jenkins community!, https://www.jenkins.io/participate/connect/
31 Jenkins - The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project., https://community.jenkins.io/

728x90