인프라

맥북 에어 M1에서 Docker로 Jenkins 서버 설치하기

jwKim96 2021. 11. 13. 10:27

최근 공부를 하며, 간단한 SpringBoot 프로젝트를 만들었습니다.

책에서는 AWS를 이용한 CI/CD 자동화 예제가 나와있었는데, 저는 이미 한번 해봤던 내용이었습니다.

그래서 예전에 해보려다 실패했던 Jenkins를 이용해서 한번 해보려고 합니다.

Jenkins 설치 및 실행

사실 예전에 도커로 Jenkins 서버를 구축하려고 했습니다..

그런데 M1 맥북이라 CPU가 arm 아키텍처로 되어있는데, 아직 Jenkins의 공식 도커 이미지는 아직 arm을 지원하지 않습니다.

그래서 포기했다가, 최근 arm에서 사용할 수 있도록 만들어진 이미지를 발견하여 다시 시도해 봤습니다.

참고

아래는 CPU 아키텍처별 Jenkins 이미지 다운로드 방법입니다

Jenkins 도커 이미지 다운로드

M1 맥북 혹은 도커를 실행하는 환경이 ARM CPU라면 jenkins4eval/jenkins 이미지를 다운받으면 됩니다.

사용 방법은 Jenkins 공식 이미지와 동일합니다.

사용방법 참고

- ARM CPU
docker pull jenkins4eval/jenkins

- AMD CPU
docker pull jenkins

그리고 아래 명령어를 입력하면 조금 전에 다운로드한 Jenkins 도커 이미지를 확인하실 수 있습니다

docker images | grep jenkins

이제 이 도커 이미지를 이용해서 간단하게 jenkins 서버를 만들어 봅시다.

(선택) Jenkins용 도커 볼륨 생성

그 전에 필수는 아닙니다만 컨테이너에서 사용할 볼륨을 따로 생성해서 사용하는것을 추천드립니다.

아래 명령어로 volume-jenkins라는 이름의 도커 볼륨을 생성할 수 있는데요.

이 볼륨을 Jenkins 이미지의 홈 디렉토리 경로에 마운트할 예정입니다.

docker volume create volume-jenkins

원래 볼륨에 대한 아무런 옵션 없이 컨테이너를 실행시키면, 자동으로 로컬에 볼륨을 생성합니다.

이때 생성되는 이름은 랜덤으로 지어지는 이름이라 식별하기가 어렵습니다.

(예를 들면 이런 이름? 6291f10e8ccdd7eadb51ebbc42d.........(생략))

그런데 컨테이너를 삭제해도 볼륨은 삭제되지 않기 때문에, 여러번 컨테이너 삭제 및 재생성을 하다 보면 미사용 볼륨이 많아집니다.

아래 명령어로 사용하지 않는 볼륨을 삭제할 수도 있지만,

docker volume prune

식별할 수 있는 이름으로 생성하여 컨테이너에 붙여 사용하고, 필요하면 복사하여 재사용하기 편리하기 때문에 이 방법을 추천드립니다.

(선택) 네트워크 생성

보통 서비스 서버와 CI/CD 서버는 분리하여 구성합니다.

하지만 네트워크 설정 없이 컨테이너를 생성하게 되면, 기본 네트워크로 구성되어 관계 없는 컨테이너와도 묶이게 됩니다.

그래서 저는 서로 연결이 필요한 컨테이너만 묶어서 구성하는것이 좋다고 생각하여 네트워크를 미리 만들어 주겠습니다.

아래 명령어로 cicd-net이라는 이름의 도커 네트워크를 생성할 수 있습니다.

docker network create cicd-net

그리고 아래 명령어로 생성된 도커 네트워크를 확인할 수 있습니다

docker network ls | grep cicd-net

Jenkins 컨테이너 실행

드디어 Jenkins 컨테이너를 실행할 차례입니다.

  • 컨테이너 이름 = jenkins
  • 네트워크 = cicd-net
  • 포트 (외부:컨테이너내부) = 8080:8080, 50000:50000
  • (선택)볼륨 (외부:컨테이너내부) = volume-jenkins:/var/jenkins_home
  • 도커 이미지 = jenkins4eval/jenkins
- ARM CPU
docker run -d -it 
    --name jenkins \ 
    --net cicd-net \
    -p 8080:8080 -p 50000:50000 \
    -v volume-jenkins:/var/jenkins_home \
    jenkins4eval/jenkins

- AMD CPU
docker run -d -it 
    --name jenkins \ 
    --net cicd-net \
    -p 8080:8080 -p 50000:50000 \
    -v volume-jenkins:/var/jenkins_home \
    jenkins

그리고 아래 명령어를 통해 컨테이너가 정상적으로 실행 되었는지 확인하실 수 있습니다.

docker ps -a | grep jenkins

Jenkins 접속

컨테이너가 실행중인것을 확인하셨다면, 이제 초기 설정만 마치면 됩니다.

Jenkins의 관리페이지 http://localhost:8080 으로 접속합니다.

그러면 아래와 같은 화면이 나오게 되는데요.

/var/jenkins_home/secrets/initialAdminPassword 경로에 있는 패스워드를 입력하시면 됩니다.

이를 확인하기 위해서 아래 명령어를 입력하여 컨테이너에 접속해야합니다.

docker exec -it jenkins /bin/bash

컨테이너에 접속하면 아래 명령어로 초기 패스워드를 확인하고 이를 초기 패스워드 입력하는 화면에 입력해주시면 됩니다.

container> cat /var/jenkins_home/secrets/initialAdminPassword

패스워드를 입려하고나면, Plugin을 설치하는 단계가 나오는데 추천하는 플러그인을 모두 설치하고 시작하겠습니다.

플러그인 설치가 완료되고 나면, 관리자 계정을 만들게 되고 이 단계가 끝나면 설치 및 초기 설정이 완료됩니다.

(Jenkins 초기 화면)