CI/CD 구축하면서 다양한 문제가 생겼다.
첫번째로는 EC2 프리티어 인스턴스 성능 부족 문제
두번째로는 젠킨스 컨테이너 안 도커 명령어를 사용할 수 없는 문제
예비군 훈련과 채용 프로세스 때문에 미뤄뒀지만 구축하는데 골치가 많이 아팠다.
젠킨스에서 스프링을 Gradle로 빌드하면 무한로딩이 생겨서 문제를 찾기 급급했다.
EC2로 인스턴스를 모니터링하니 CPU 사용량이 무려 100%나 찍으면서 서버가 맛이 가버렸다 🥲
해당 문제에 대해 검색해보니 프리티어 사용자들은 Jenkins를 사용하면서 동일한 문제가 많이 발생했었고 EC2 스왑메모리를 설정함으로써 해결되었다.
스왑 메모리란 디스크 공간을 사용함으로써 부족한 메모리 공간을 해결할 수 있는 방법이다.
Swap Memory를 사용하면 Disk의 일부를 Memory처럼 사용할 수 있는 장점이 있는 대신 속도가 느린 단점이 있다.
Swap 파일 메모리 할당
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
swapfile에 권한 설정
sudo chmod 600 /swapfile
swap 공간 생성
sudo mkswap /swapfile
swapon 명령어를 통해 swapfile을 swap memory에 추가
sudo mkswap /swapfile
/etc/fstab에 세팅
sudo vi /etc/fstab
# 파일의 맨 끝 다음줄에 아래 명령어 작성
/swapfile swap swap defaults 0 0
etc/fstab는 파일시스템 정보를 저장하는 곳이라고 한다.
파티션 변경 및 디스크 추가 시에는 이 파일에 등록해야 자동으로 마운트가 가능하다.
free 명령어로 ec2 메모리 상태 확인
free
젠킨스 도커 컨테이너에서 ec2에 docker와 볼륨마운트를 통해 공유하도록 구성하었다.
볼륨을 마운트하였음에도 불구하고 도커를 사용하지 못하였다.
curl -fsSLO https://get.docker.com/builds/Lunux/x86_64/docker-17.04.0-ce.tgz
해당 문제를 젠킨스 도커 컨테이너 안에서 도커 실행 파일을 다운받음으로써 해결을 할 수 있었다.
NGINX를 통해 BLUE/GREEN 무중단 배포를 구현하면 좋겠지만 시간이 여유로울 때 해야할 것 같다. 🥲