[프로젝트] CI/CD를 구축하면서

dohyun-dev·2023년 7월 10일
1

프로젝트

목록 보기
2/4

CI/CD 구축하면서 다양한 문제가 생겼다.

첫번째로는 EC2 프리티어 인스턴스 성능 부족 문제

두번째로는 젠킨스 컨테이너 안 도커 명령어를 사용할 수 없는 문제

예비군 훈련과 채용 프로세스 때문에 미뤄뒀지만 구축하는데 골치가 많이 아팠다.

1. EC2 프리티어 인스턴스 성능 부족 문제

젠킨스에서 스프링을 Gradle로 빌드하면 무한로딩이 생겨서 문제를 찾기 급급했다.

EC2로 인스턴스를 모니터링하니 CPU 사용량이 무려 100%나 찍으면서 서버가 맛이 가버렸다 🥲

해당 문제에 대해 검색해보니 프리티어 사용자들은 Jenkins를 사용하면서 동일한 문제가 많이 발생했었고 EC2 스왑메모리를 설정함으로써 해결되었다.

Swap Memory?

스왑 메모리란 디스크 공간을 사용함으로써 부족한 메모리 공간을 해결할 수 있는 방법이다.

Swap Memory를 사용하면 Disk의 일부를 Memory처럼 사용할 수 있는 장점이 있는 대신 속도가 느린 단점이 있다.

Swap Memory 설정법

  1. Swap 파일 메모리 할당

    sudo dd if=/dev/zero of=/swapfile bs=128M count=16
  2. swapfile에 권한 설정

    sudo chmod 600 /swapfile
  3. swap 공간 생성

    sudo mkswap /swapfile
  4. swapon 명령어를 통해 swapfile을 swap memory에 추가

    sudo mkswap /swapfile
  5. /etc/fstab에 세팅

    sudo vi /etc/fstab
    # 파일의 맨 끝 다음줄에 아래 명령어 작성
    /swapfile swap swap defaults 0 0

    etc/fstab는 파일시스템 정보를 저장하는 곳이라고 한다.

    파티션 변경 및 디스크 추가 시에는 이 파일에 등록해야 자동으로 마운트가 가능하다.

  6. free 명령어로 ec2 메모리 상태 확인

    free

2. 젠킨스 도커 컨테이너 도커 명령어 문제

젠킨스 도커 컨테이너에서 ec2에 docker와 볼륨마운트를 통해 공유하도록 구성하었다.

볼륨을 마운트하였음에도 불구하고 도커를 사용하지 못하였다.

curl -fsSLO https://get.docker.com/builds/Lunux/x86_64/docker-17.04.0-ce.tgz

해당 문제를 젠킨스 도커 컨테이너 안에서 도커 실행 파일을 다운받음으로써 해결을 할 수 있었다.

다음 구현할 점

NGINX를 통해 BLUE/GREEN 무중단 배포를 구현하면 좋겠지만 시간이 여유로울 때 해야할 것 같다. 🥲

0개의 댓글