[CI/CD] Github, Jenkins, Docker를 활용한 CI/CD 환경 구축 - 2

chrkb1569·2023년 12월 30일
0

개인 프로젝트

목록 보기
25/28

지난 시간에는 CI/CD 환경을 구축해야할지 간략하게 알아보았으니, 오늘은 간단하게 Docker를 활용하여 Jenkins 서버를 구축해보겠습니다.

인스턴스 생성

일단 Jenkins를 동작시키기 위한 인스턴스를 생성해주겠습니다.

AWS EC2 프리티어를 사용하여 인스턴스를 생성해주었습니다.

Docker 스펙 확인

Docker를 인스턴스에 설치한 뒤, Docker 위에서 Jenkins를 동작시키기 때문에 Docker가 실행하기 위하여 필요한 스펙을 확인해줍니다.

https://docs.docker.com/desktop/install/linux-install/#system-requirements

공식 문서를 통하여 이를 확인할 수 있는데,

최소 4GB의 램이 필요하다는 것을 보아하니 Jenkins 인스턴스에서 사용했던 것처럼 스와핑을 사용해야할 것 같습니다.

Swapping

지난 게시글에서 스와핑을 다뤘기에 자세한 설명을 생략하도록 하겠습니다.

스와핑 과정과 자세한 설명은 AWS 공식 문서에서 확인하실 수 있습니다.

https://repost.aws/ko/knowledge-center/ec2-memory-swap-file

스와핑이 성공적으로 수행되었음을 확인할 수 있습니다.

Docker 설치

Ubuntu에 Docker를 설치하는 과정은

https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository

Docker 공식 문서를 참고하였으며, 저는 APT Repository를 통해 다운로드 받는 방식을 선택하여 다운로드하였습니다.

다음처럼 인스턴스에 Docker가 정상적으로 설치되었음을 확인할 수 있습니다.

Docker 권한 부여

Docker는 정상적으로 실행되었으나, sudo 없이 명령어를 입력하면 다음처럼 권한 문제로 인하여 명령어가 실행되지 않는 현상이 발생합니다.

이는 Docker가 커널모드에서 작업하기 때문에 발생하는 현상인데, 이와 같은 현상은 새로운 사용자를 생성한 뒤, 사용자에게 Docker와 관련된 권한들을 부여함으로써 해결할 수 있습니다.

다음 명령어를 통하여 사용자를 Docker Group에 포함시켜줍니다.

sudo usermod -aG docker $USER

sudo를 사용하지 않고도 Docker가 잘 실행되고 있는 것을 확인할 수 있습니다.

Jenkins 실행

Docker가 정상적으로 설치되었으니, Jenkins 이미지를 Docker Hub로부터 가져와 실행해야합니다.

Docker Hub로 이동하여 Jenkins를 찾아보면 다음처럼 Jenkins 이미지를 찾을 수 있는데, 어떠한 명령어를 통하여 Jenkins 이미지를 실행할 수 있는지 명시되어 있는 것을 확인할 수 있을겁니다.

다음 명령어를 통하여 Jenkins를 인스턴스에서 실행해보도록 하겠습니다.

$ docker run -d --name Jenkins -p 8080:8080 jenkins/jenkins:lts-jdk17

docker run {Docker 이미지 이름} -> 이미지를 Docker 컨테이너에서 실행하는 명령어입니다. 저는 Docker 컨테이너에서 Jenkins를 실행해야하기 때문에 Jenkins 이미지를 실행하도록 명령어를 작성하였습니다.

-d 옵션 -> 이미지를 실행할 때, detached mode로 실행하기 위한 옵션입니다.
해당 옵션을 사용하지 않을 경우, 이미지가 실행됨과 동시에 터미널 모드로 넘어가 추가적인 작업을 수행할 수 없습니다. nohup을 사용하지 않고 프로젝트를 실행하는 경우와 동일하다고 생각하면 좋을 것 같습니다.
--name 옵션 -> 실행되는 작업에 이름을 부여하기 위한 옵션입니다.
-p 옵션 -> 컨테이너가 실행될 때, 허용할 포트를 의미합니다.

다음처럼 Jenkins가 Docker 위에서 잘 동작하고 있음을 확인할 수 있었으며,

인스턴스에 Jenkins를 직접 설치했었던 지난번과 똑같은 초기 화면을 확인할 수 있었습니다.

그러나, 지난번에는 Jenkins가 인스턴스 내부에 설치되었기 때문에 해당 경로로 직접 이동하여 Jenkins의 비밀번호를 확인할 수 있었으나, 이번에는 Docker를 사용하여 Jenkins를 실행하였기 때문에 비밀번호를 확인하기가 조금 난해하다고 생각할 수 있습니다.

이러한 경우에는 다음 명령어를 통하여 Docker 컨테이너를 탐색할 수 있습니다.

$ docker exec -it {실행 중인 이미지 이름} bash

명령어를 입력하였을 경우, 다음처럼 컨테이너 내부로 들어온 것을 확인할 수 있습니다.

그리고 Jenkins에서 가리키고 있는 경로로 이동하여 비밀번호를 확인한 뒤, 입력해줍니다.

일단 오늘은 간단하게 Docker를 통하여 Jenkins를 실행하는 것까지 해봤습니다.

다음에는 Github와 Jenkins를 연동하여 커밋이 완료될 때마다 Jenkins에서 빌드가 발생하도록 설정해보도록 하겠습니다.

0개의 댓글