Jenkins와 Docker로 CI/CD pipeline 구축하기 (1)

bagt13·2023년 1월 29일
3

Project

목록 보기
15/17
post-thumbnail

🤵🏻‍♂️ Jenkins의 장점

CI/CD 툴에는 Jenkins 외에도 Github Actions, GitLab, Bitbucket Pipelines 등 여러가지가 존재하는데, 그 중 Jenkins가 가지고 있는 장점은 다음과 같다.

  1. 개발자의 편의를 위한 많은 Plugin들을 제공한다. 이로 인해 Git 연동과 다른 EC2와의 통신을 위한 SSH등을 편리하게 할 수 있다.

  2. GUI 환경을 제공한다. Jenkins를 설치하면 CLI가 아닌 GUI 화면에서 편하게 사용할 수 있다.

  3. Java 기반이기 때문에 JDK, Gradle, Maven 등의 설정을 편리하게 할 수 있기 때문에 Java 프로젝트에 적합하다.



✅ 배포 아키텍처 (Architecture)

Swap 메모리를 설정했음에도 하나의 EC2에 Jenkins와 WAS를 동시에 돌려보니 Jenkins가 죽는 현상이 발생했다.

따라서 EC2 두개를 띄워 CI/CD와 운영 서버 환경을 분리하기로 결정했다.


📒 운영 서버 환경

Jenkins를 활용한 CI/CD 환경 구축에는 여러가지 방법들이 있다.

  1. Jenkins 서버에서 도커 이미지(docker image)를 Docker Hub에 push 후 운영 서버에서 pull 하기

  2. Jenkins 서버에서 빌드한 jar 파일을 SSH 접속 등을 통해 운영 서버에 전달 후 실행시키기

나는 2번 방법으로 CI/CD 환경을 구축해보기로 했다.



🐳 EC2에 Docker 설치

Docker 공식 docs의 가이드가 친절하게 작성되어 있기 때문에, 그대로 따라하면 쉽게 설치할 수 있다.

https://docs.docker.com/engine/install/ubuntu/


✅ Swap 메모리 설정

프리티어 기준 EC2 메모리는 1GB이다. 따라서 서버가 뻗어버릴 수도 있고, 성능에도 문제가 생길 수 있기 때문에, Swap 메모리를 확보해 총 3GB로 사용하는 방법을 많이 사용한다.

📒 1. Swap 메모리 상태 확인

free 또는 free -h

📒 2. Swap 메모리 확보

AWS 공식 가이드

  1. Swap 파일 생성
$ sudo dd if=/dev/zero of=/swapfile bs=128M count=16
  • 명령에서 bs는 블록 크기이고 count는 블록 수이다.
  • dd 명령을 사용하여 root 파일 시스템에 swap file을 생성한다.

일반적으로 2GB를 증설시키며, 이 명령어도 동일하게 작동한다 (128MB x 16 = 2048MB)


  1. 생성된 Swap 파일 권한 부여
$ sudo chmod 600 /swapfile

  1. Linux 스왑 영역 설정
sudo mkswap /swapfile
  1. 스왑 공간에 스왑 파일을 추가하여 사용할 수 있도록 한다.
sudo swapon /swapfile
  1. 작업 성공 확인
sudo swapon -s
  1. 부팅 시 Swap 파일 활성화
$ sudo vi /etc/fstab

마지막 줄에 아래 내용 추가

$ /swapfile swap swap defaults 0 0

📒 3. Swap 메모리 확인



🤵🏻‍♂️ Jenkins 서버 구축

Jenkins를 EC2 서버에 다운받는 방식을 사용할 수도 있지만, Docker를 통해 더 편리하게 사용할 수 있다.

$ sudo docker run -d --name jenkins -p 9090:8080 jenkins/jenkins:jdk11
  • -d : 컨테이너를 백그라운드로 실행한다.
  • --name : 컨테이너에 이름을 부여한다. 컨테이너 실행과 같은 명령어에서 컨테이너 ID 대신 이름을 사용해 편리하게 사용할 수 있다.
  • -p 9090:8080 : 컨테이너 외부와 통신할 port(9090)와 내부적으로 사용할 port(8080)를 지정해 포워딩할 수 있다. 9090 port로 접속하기 위해 설정했다.

컨테이너 실행 후 docker container ps를 통해 포트 포워딩 확인

이후부터는 생성된 컨테이너를 바로 실행시키면 된다.

sudo docker start jenkins

📒 최초 비밀번호 입력

컨테이너를 실행시키고, {EC2 Pulbic IP}:8080으로 접속하면 다음 화면이 나온다.

최초에는 Administrator password를 입력해야 한다. 이 password는 /var/jenkins_home/secrets/initialAdminPassword 경로에 있다고 친절히 나와있다.

$ sudo docker exec -it jenkins bash
$ cat /var/jenkins_home/secrets/initialAdminPassword

📒 Plugin 설치

Plugin 선택 화면이 나오며, Install Suggested Plugins를 선택하여 진행했다. Plugin 같은 경우에는 추후에 따로 설치할 수도 있다.


📒 Jenkins 계정 생성 후 화면

이제 본격적으로 Jenkins Pipeline을 구축하면 된다.



다음 포스트 (Pipeline 구축 및 CI/CD 테스트)

Jenkins와 Docker로 CI/CD Pipeline 구축하기 2편

profile
주니어 백엔드 개발자입니다😄

0개의 댓글