Docker 를 이용한 Jenkins 설치

JenkinsBeginner
지금 연습하기

소개

이 랩에서는 Docker 를 사용하여 Jenkins 를 설치하는 과정을 살펴봅니다. Jenkins 는 지속적인 통합 및 지속적인 제공 (CI/CD) 프로세스를 위한 널리 사용되는 자동화 서버입니다. 이 랩을 마치면 Docker 를 사용하여 Jenkins 를 설정하는 실질적인 경험을 얻게 되며, 향후 DevOps 프로젝트를 위한 탄탄한 기반을 마련할 수 있습니다.

초보자의 경우, Docker 가 컨테이너라고 하는 격리된 환경에서 애플리케이션을 패키징하고 실행할 수 있게 해주는 플랫폼이라는 점을 이해하는 것이 중요합니다. 이러한 격리는 애플리케이션이 서로 다른 시스템에서 일관되게 작동하도록 보장합니다. 반면에 Jenkins 는 특히 코드 빌드, 테스트 및 배포와 같은 소프트웨어 개발의 일부를 자동화하는 데 도움이 되는 도구입니다.

Docker 환경 준비

이 단계에서는 Docker 가 시스템에 제대로 설치되어 실행되고 있는지 확인합니다. Docker 는 이 랩에서 필수적입니다. Docker 를 사용하면 컨테이너에서 Jenkins 를 실행하여 일관되고 격리된 환경을 제공할 수 있기 때문입니다.

먼저 Docker 가 설치되어 실행 중인지 확인해 보겠습니다. 터미널을 열고 다음 명령을 실행합니다.

docker --version

Docker version command output

이 명령은 시스템에 설치된 Docker 의 버전을 표시해야 합니다. 다음과 유사한 출력을 볼 수 있습니다.

Docker version 20.10.21, build 20.10.21-0ubuntu1~22.04.3

버전 번호가 표시되지 않으면 Docker 가 설치되지 않았거나 시스템의 PATH 에 없는 것일 수 있습니다. 이런 경우 걱정하지 마세요. 곧 해결할 것입니다.

다음으로 Docker 데몬이 실행 중인지 확인해 보겠습니다.

sudo systemctl status docker

이 명령은 Docker 서비스의 상태를 확인합니다. Docker 서비스가 활성 상태 (실행 중) 임을 나타내는 출력을 볼 수 있습니다. 다음과 유사하게 보일 수 있습니다.

● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-09-11 10:00:00 UTC; 2h 30min ago

Docker 가 실행 중이지 않으면 서비스가 비활성 상태이거나 실패했음을 나타내는 메시지가 표시됩니다.

Jenkins Docker 이미지 가져오기

이 단계에서는 Docker Hub 에서 공식 Jenkins Docker 이미지를 다운로드합니다. Docker Hub 는 Docker 이미지가 저장되고 공유되는 클라우드 기반 저장소입니다.

최신 LTS(Long Term Support, 장기 지원) 버전의 Jenkins 를 가져오려면 다음 명령을 실행합니다.

docker pull jenkins/jenkins:lts

이 명령을 자세히 살펴보겠습니다.

  • docker pull은 Docker 에게 이미지를 다운로드하도록 지시합니다.
  • jenkins/jenkins는 이미지의 이름입니다 (Jenkins 프로젝트에서 생성됨).
  • :lts는 일반적으로 더 안정적인 Long Term Support 버전을 원한다는 것을 지정하는 태그입니다.

이 명령은 Jenkins 이미지를 로컬 머신에 다운로드합니다. 다운로드는 인터넷 속도에 따라 몇 분 정도 걸릴 수 있습니다. 이미지 구성 요소인 다양한 레이어의 다운로드 상태를 나타내는 진행률 표시줄이 표시됩니다.

다운로드가 완료되면 다음을 실행하여 이미지가 로컬에서 사용 가능한지 확인할 수 있습니다.

docker images

이 명령은 시스템의 모든 Docker 이미지를 나열합니다. 다음과 유사하게 Jenkins 이미지가 출력에 나열되어야 합니다.

REPOSITORY         TAG       IMAGE ID       CREATED        SIZE
jenkins/jenkins    lts       7a7add0bf3da   8 days ago     470MB

Jenkins 이미지가 표시되지 않으면 다운로드에 실패했을 수 있습니다. 이 경우 docker pull 명령을 다시 실행해 보십시오. 문제가 지속되면 인터넷 연결을 확인하거나 다른 네트워크를 사용해 보십시오.

Jenkins 데이터용 Docker 볼륨 생성

이 단계에서는 Jenkins 데이터를 영구적으로 저장하기 위해 Docker 볼륨을 생성합니다. 이는 Jenkins 구성 및 빌드 기록을 유지하는 데 중요한 단계입니다.

Docker 볼륨은 Docker 컨테이너에서 생성되고 사용되는 데이터를 영구적으로 저장하는 방법을 제공합니다. 컨테이너가 중지되거나 제거되더라도 구성, 작업 데이터 및 빌드 아티팩트를 유지하려는 Jenkins 에 특히 중요합니다.

다음 명령을 실행하여 jenkins-data라는 새 볼륨을 생성합니다.

docker volume create jenkins-data

이 명령은 Docker 에게 새 볼륨을 생성하도록 지시합니다. Docker 는 이러한 볼륨을 관리하며 호스트 파일 시스템의 일부에 저장합니다.

모든 Docker 볼륨을 나열하여 볼륨이 생성되었는지 확인할 수 있습니다.

docker volume ls

다음과 같이 볼륨 목록에 jenkins-data가 표시되어야 합니다.

DRIVER    VOLUME NAME
local     jenkins-data

볼륨이 표시되지 않으면 다시 생성해 보십시오. 문제가 지속되면 Docker 볼륨을 생성하는 데 필요한 권한이 있는지 확인하십시오 (사용자가 docker 그룹에 없는 경우 sudo를 사용해야 할 수 있습니다).

Docker 볼륨을 이해하는 것은 중요합니다. 그 이유는 다음과 같습니다.

  1. 컨테이너의 수명 주기 이상으로 데이터를 유지할 수 있습니다.
  2. 쉽게 백업하고 복원할 수 있습니다.
  3. 필요한 경우 컨테이너 간에 공유할 수 있습니다.

Jenkins Docker 컨테이너 실행

이제 Jenkins 이미지와 데이터 지속성을 위한 볼륨이 있으므로 Jenkins 컨테이너를 실행할 수 있습니다. 이 단계에서는 실제로 Docker 컨테이너에서 Jenkins 를 시작하여 시스템에서 액세스할 수 있도록 합니다.

다음 구성을 사용하여 컨테이너를 실행합니다.

  • 컨테이너 포트 8080 을 호스트 포트 8080 에 매핑 (웹 인터페이스용)
  • 컨테이너 포트 50000 을 호스트 포트 50000 에 매핑 (에이전트 연결용)
  • jenkins-data 볼륨을 컨테이너의 /var/jenkins_home에 마운트
  • 분리 모드 (detached mode) 로 컨테이너 실행

Jenkins 컨테이너를 실행하려면 다음 명령을 실행합니다.

docker run -d -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home --name jenkins-lts jenkins/jenkins:lts

이 명령을 자세히 살펴보겠습니다.

  • docker run은 새 컨테이너를 생성하고 실행합니다.
  • -d는 분리 모드 (백그라운드) 로 컨테이너를 실행합니다.
  • -p 8080:8080은 컨테이너의 포트 8080 을 호스트의 포트 8080 에 매핑합니다.
  • -p 50000:50000은 컨테이너의 포트 50000 을 호스트의 포트 50000 에 매핑합니다.
  • -v jenkins-data:/var/jenkins_home은 Docker 볼륨을 컨테이너의 Jenkins 홈 디렉토리에 마운트합니다.
  • --name jenkins-lts는 컨테이너에 쉽게 참조할 수 있는 이름을 지정합니다.
  • jenkins/jenkins:lts는 사용할 이미지를 지정합니다.

이 명령을 실행하면 Docker 가 백그라운드에서 Jenkins 컨테이너를 시작합니다. 다음을 실행하여 컨테이너가 실행 중인지 확인할 수 있습니다.

docker ps

이 명령은 실행 중인 모든 Docker 컨테이너를 나열합니다. 다음과 유사하게 Jenkins 컨테이너가 출력에 나열되어야 합니다.

CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS                                                                                      NAMES
747b6dc7b1af   jenkins/jenkins:lts   "/usr/bin/tini -- /u…"   4 seconds ago   Up 3 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp   jenkins-lts

Jenkins 컨테이너가 표시되지 않으면 시작에 실패했을 수 있습니다. 다음을 사용하여 오류 메시지를 확인할 수 있습니다.

docker logs jenkins-lts

이렇게 하면 컨테이너의 로그가 표시되어 문제를 진단하는 데 도움이 될 수 있습니다.

Jenkins 웹 인터페이스 접속

Jenkins 컨테이너가 실행 중이므로, 웹 인터페이스에 액세스하여 초기 설정을 완료할 수 있습니다. 이 단계에서는 Jenkins 에 액세스하고 초기 구성을 수행하는 방법을 안내합니다.

Jenkins 웹 인터페이스에 액세스하는 방법은 두 가지가 있습니다.

  1. 가상 환경의 상단 탭에서 + 기호를 클릭하여 새 Web Service를 생성하고 포트 8080을 입력합니다.

    Creating Jenkins web service tab

    이 방법은 랩 환경 내에서 작동하며, Jenkins 인터페이스를 표시하는 새 탭을 생성합니다.

  2. VNC 데스크톱에서 Firefox 브라우저를 엽니다. 브라우저는 자동으로 http://localhost:8080으로 열리므로 URL 을 수동으로 입력할 필요가 없습니다.

    Firefox Jenkins access page

Jenkins 의 "Unlock Jenkins" 페이지가 표시되어야 합니다. 이 보안 조치는 승인된 사용자만 Jenkins 를 설정할 수 있도록 보장합니다.

이 랩 환경의 경우 기본 사용자 이름은 admin이며, 비밀번호도 admin입니다.

"Unlock Jenkins" 페이지에 이 자격 증명을 입력하고 "Continue"를 클릭합니다.

Jenkins unlock page credentials

Jenkins 잠금을 해제한 후에는 플러그인 설치 및 관리자 사용자 생성과 같은 초기 설정 프로세스를 안내받게 됩니다. 이 랩의 경우 빠르게 시작하려면 "Install suggested plugins" 옵션을 선택할 수 있습니다.

요약

이 랩에서는 Docker 를 사용하여 Jenkins 를 성공적으로 설치하고 설정했습니다. Docker 환경 준비, Jenkins 이미지 가져오기, Jenkins 데이터용 영구 볼륨 생성, Jenkins 컨테이너 실행, 초기 설정을 위한 Jenkins 웹 인터페이스 접속 등 필수 단계를 다루었습니다.

이 실습 경험은 현대 DevOps (데브옵스) 방식에서 중요한 기술인 Docker 를 사용하여 Jenkins 를 배포하는 데 대한 탄탄한 기반을 제공했습니다. 이제 Jenkins 를 더 자세히 살펴보고, 빌드 작업을 생성하고, 개발 워크플로우에 통합할 준비가 되었습니다.