관리 메뉴

bright jazz music

1. 젠킨스 컨테이너 구동 및 설정+필요 플러그인 설치 본문

OS 및 기타/docker & kubernetes

1. 젠킨스 컨테이너 구동 및 설정+필요 플러그인 설치

bright jazz music 2025. 3. 10. 21:07

 

1. ports:

  • 50000번 포트는 젠킨스 마스터 노드와 젠킨스 슬레이브 노드가 통신하는 포트이다. 비워 놓으면 포트포워딩이 설정되지 않기 때문에 명시적으로 기본 포트인 50000을 적어준다.
  • 8080포트는 젠킨스 웹콘솔에 접근하는 포트이다. 기본포트는 8080이지만 여기서는 9090으로 변경해서 적어줬다.

 

2. volumes:

도커 볼륨을 의미한다. 도커 컨테이너는 기본적으로 휘발성이기 때문에 컨테이너가 삭제되면 내부 데이터도 전부 삭제돼 버린다. 컨테이너가 삭제되더라도 데이터는 남겨 놓기 위해서 호스트의 공간을 도커 컨테이너에게 연결(마운트)해 놓는 것이다. 이 때 이 공간을 도커 볼륨이라고 하며, 도커 컨테이너는 이 공간을 마치 컨테이너 내부의 공간처럼 사용하게 된다.

 

2.1 volume 1

이 경우, 도커 컨테이너 내부의 /var/jenkins_home 디렉토리가 호스트(도커 컨테이너가 구동되는 머신)의 /Users/catnail/jenkins-data디렉토리를 사용하게 된다. 호스트 머신의 경로는 임의의 경로이므로 자신의 원하는 디렉토리를 생성하거나 선택해줘도 된다. 참고로 jenkins_home은  젠킨스 컨테이너 내부에서 젠킨스가 모든 데이터와 설정을 저장하는 기본 디렉토리이다. 아래와 같은 중요한 데이터가 저장된다.

  1. 젠킨스 설정 파일들
  2. 설치된 플러그인들
  3. 작업(Job) 설정 및 구성 정보
  4. 빌드 히스토리 및 결과물
  5. 사용자 인증 정보
  6. 자격 증명(credentials) 정보
  7. 워크스페이스 데이터

2.2 volume 2

 

호스트의 프로젝트가 위치한 디렉토리를를 /projects라는 이름으로 연결해주었다. 이 방법을 통해서 젠킨스가 호스트의 프로젝트 디렉토리에서 작업을 수행할 수 있다. 만약 이렇게 해주지 않는다면 기존 프로젝트를 위에서 마운트한 jenkins-data 프로젝트로 옮기거나 링크를 걸어줘야 한다. 나는 그 방법이 번거롭다고 생각했기 때문에 이렇게 프로젝트들이 위치한 디렉토리를 마운트 해준 것이다.

 

 


2.3. volume 3
/var/run/docker.sock:
이 파일은 Docker 데몬과 통신하기 위한 Unix 소켓 파일이다. 이 소켓 파일을 Jenkins 컨테이너에 마운트함으로써 Jenkins 컨테이너 내부에서 호스트 머신의 Docker 엔진을 직접 사용할 수 있게 된다. 이를 "Docker-outside-of-Docker(DooD)" 또는 "Docker socket mounting" 방식이라고도 부른다.

 

  • 호스트의 Docker 소켓(/var/run/docker.sock)을 컨테이너에 마운트하는 방식
  • 컨테이너 내부에 Docker CLI만 설치됨
  • 실제로는 호스트의 Docker 엔진을 사용하는 것


이 설정이 필요한 이유:
1. Jenkins에서 Docker 파이프라인을 통해 Docker 명령(빌드, 푸시, 실행 등)을 실행하기 위함
2. Jenkins 작업 내에서 Docker 이미지를 빌드하기 위함
3. 컨테이너 내에 별도의 Docker 엔진을 설치하지 않고도 호스트의 Docker를 사용하기 위함
4. 자원 효율성 측면에서 컨테이너 내 별도 Docker 엔진 실행보다 유리함

호스트의 /var/run/docker.sock 파일을 컨테이너의 동일한 경로(/var/run/docker.sock)에 마운트하여 젠킨스가 Docker 명령어를 실행할 수 있게 한다. 이 설정이 없으면 Jenkins 컨테이너 내에서 Docker 명령어를 실행할 수 없다.

 

이 방식은 도커 컨테이너가 호스트의 도커 엔진을 사용하기 때문에 중복 설치를 방지하고 자원을 절약하는 이점이 있다. 그러나 이 방법은 개별 컨테이너가 외부 환경에 종속되는 단점을 만들기도 한다. 따라서 개별 컨테이너의 완전한 격리를 원한다면 도커 컨테이너 내부에서 다시 도커 엔진을 설치하여 사용할 수도 있다. 이 후자의 방식을 Docker-in-Docker, DinD)라고 부른다. 여기서는 자원을 절약하기 위해 호스트의 도커 엔진을 사용하는  DooD 방식을 사용할 것이다.

 

2.4 volume 4

 

호스트의 docker cli를 사용하기 위해 마운트

 

 

 

 

 

 

아래와 같이 구동 로그가 출력되는 것을 볼 수 있다.

 

2025-03-10 20:47:24 
2025-03-10 20:47:24 *************************************************************
2025-03-10 20:47:24 *************************************************************
2025-03-10 20:47:24 *************************************************************
2025-03-10 20:47:24 
2025-03-10 20:47:24 Jenkins initial setup is required. An admin user has been created and a password generated.
2025-03-10 20:47:24 Please use the following password to proceed to installation:
2025-03-10 20:47:24 
2025-03-10 20:47:24 2b4c769c9b5641f1b673075920c2391a
2025-03-10 20:47:24 
2025-03-10 20:47:24 This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
2025-03-10 20:47:24 
2025-03-10 20:47:24 *************************************************************
2025-03-10 20:47:24 *************************************************************
2025-03-10 20:47:24 *************************************************************
2025-03-10 20:47:24 
2025-03-10 20:47:29 2025-03-10 11:47:29.337+0000 [id=42]        INFO    jenkins.InitReactorRunner$1#onAttained: Completed initialization
2025-03-10 20:47:29 2025-03-10 11:47:29.361+0000 [id=25]        INFO    hudson.lifecycle.Lifecycle#onReady: Jenkins is fully up and running
2025-03-10 20:47:30 2025-03-10 11:47:30.888+0000 [id=60]        INFO    h.m.DownloadService$Downloadable#load: Obtained the updated data file for hudson.tasks.Maven.MavenInstaller
2025-03-10 20:47:30 2025-03-10 11:47:30.888+0000 [id=60]        INFO    hudson.util.Retrier#start: Performed the action check updates server successfully at the attempt #1

 

 

 

3. 최초 비밀번호 설정

브라우저에서  http://localhost:9090으로 접근하면 웹콘솔 초기 설정 페이지가 뜬다. 최초 비밀번호를 붙여 넣기 해주자.

 

내 경우는 구동 로그에 있는 

2b4c769c9b5641f1b673075920c2391a

를 붙여 넣었다.

 

 

4. 추천 플러그인 설치

그리고 install suggested plugins 를 눌러 설치해줬다. 

 

 

 

마운트 해줬던 도커 볼륨에 아래와 같은 파일들이 생겨나는 것을 볼 수 있다.

 

 

5. 최초 관리자 계정 생성 및 구성

설치가 완료되면 어드민 계정을 설정해준다. 만약 스킵하고 나중에 계정을 만들어 줄 수도 있지만, 그 전까지는 로그인 시마다 초기 비밀번호(2b4c769c9b5641f1b673075920c2391a)를 사용해야하므로 불편하다.

 

 

생성하고 다음으로 넘어가면 아래와 같은 인스턴스 구성 페이지가 뜬다.

 

 

여기서 설정하는 "Jenkins URL"은 Jenkins가 외부 링크, 이메일 알림, PR 상태 업데이트 등을 생성할 때 사용된다. 현재 제안된 값은 http://localhost:9090/로 되어 있는데, 이는 현재 접속한 주소를 기반으로 자동 생성된 값이다.

 

이 URL 설정을 건너뛰거나 변경하지 않고 기본값을 사용해도 Jenkins 기본 기능에는 문제가 없다. 하지만 아래와 같은 상황에서는 정확한 URL 설정이 중요하다.

  1. 이메일 알림을 보낼 때 링크가 포함될 경우
  2. GitHub, GitLab 등과 연동하여 PR 상태 업데이트를 보낼 때
  3. 다른 사람들이 원격에서 Jenkins에 접근해야 할 때

로컬에서만 개인적으로 사용할 예정이라면 그냥 기본값을 사용해도 무방하다. 이 설정은 나중에 Jenkins 관리 페이지에서 언제든지 변경할 수 있다. 즉, 설정을 건너뛰더라도 Jenkins의 핵심 기능(빌드, 배포 등)은 정상적으로 작동하지만 외부 시스템과의 연동이나 알림 기능에서 링크가 올바르게 생성되지 않는다는 것이다.

 

 

완료

 

 

 

 

 

6. 필요 플러그인 설치. 도커 + ssh agent

 

 

 

Docker Pipeline, Docker Commons Plugin가 필요하다. 그냥 전체 패키지인 docker 플러그인을 설치했다.

 

 

 

 

ssh agent 설치

 

 

왼쪽의 installed plugin에 들어가서 플러그인이 설치됐는지 확인해보자.

 

 

 

이것으로 기본적인 구성과 필요한 플러그인 설치는 마쳤다.

Comments