-
Jenkins 활용해서 Spring boot 서버 배포하기 - 1기타 2021. 12. 12. 18:55
하반기 취준이 끝났다.. 결과는 비록 좋진 않았지만 이번학기도 능력치를 많이 끌어 올렸다고 생각한다.
SW마에스트로(소마) 과정 중 혼자 배포 자동화를 했던것, 졸업 프로젝트를 완성한 뒤 배포한 것 등..
한 학기가 지나갈 수록 많은 것을 얻어가고 있다.
CS지식들도 1학기 면접봤을 때보다 대답하는 비율도 많이 늘었고, 기술면접에도 합격할 수 있었다.
기술면접을 공부하면서 쌓았던 지식들을 직접 소마 프로젝트에 적용해 보면서 DB 인덱스를 고민해보고 이용했던게 머리에 남기도 했다.
이야기 할 것들은 많지만 이만큼 하도록하고 소마에서 했던 배포 자동화에 대해서 정리하는 겸 다시 처음부터 구축해보기로 했다.
사용할 기술들
Jenkins, Docker, Spring boot, Git, AWS EC2 서버 2대 (Jenkins, Server 용 각각)
다음과 같이 Git hook trigger을 이용해 Jenkins로 빌드한 jar 파일을 spring server로 전송해
해당 jar 파일을 docker container로 띄우는 작업까지 할 것이다.
1. Jenkins 서버 및 배포 서버 구축하기
다음과 같이 Jenkins용 빌드 서버와 배포용 server를 따로 둔다. ubuntu 18.04 버전으로 실행했다.
여기서 중요한 점
Jenkins 서버는 micro보다 메모리가 더 많은 t2.small로 해뒀다.
이유는 Jenkins자체가 메모리를 많이 사용하기 때문에 간혹 Spring project를 빌드 하는 도중 무한 루프가 걸려
서버조차 접근할 수 없게 되기 때문에 메모리가 1GB 더 높은 t2.small을 택했다.
2. Git, Docker 설치
# git 설치 apt-get update apt-get install git git --version
EC2에 Git은 기본적으로 깔려있었다. 그래도 혹시 모르니 다운받자.
sudo를 붙이지 않으면 권한 에러가 뜨는데 이는 sudo su - 를 통해 root 계정으로 이동하게되면 sudo를 굳이 붙이지 않아도 된다.
JDK를 따로 설치하지 않는 이유는 Docker로 JDK 이미지를 다운 받기 때문에 설치하지 않았다.
Docker를 쓰지 않으실 분은 자신의 프로젝트에 맞는 JDK 버전을 다운 받아서 하길 원한다.
* apt와 apt-get은 차이가 없다고 봐도 된다. 하지만 apt-get이 기능은 더 많다고 한다.
마지막 명령어를 통해 git 버전이 보인다면 성공!
1) docker 설치 전 사전 작업
# 사전 작업 apt-get update apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Jenkins 또한 docker로 띄우기 위해서 두 서버 똑같은 작업을 해줘야 한다. (물론 굳이 docker를 쓰지 않아도 된다.)
2) docker engine 설치
# docker engine install apt-get update apt-get install docker-ce docker-ce-cli containerd.io docker --version
마지막 도커 버전을 확인용으로 해주면 아래와 같이 표시된다.
3. Jenkins 도커로 띄우기
1) Jenkins 이미지를 받아온다.
docker pull jenkins/jenkins:lts
* LTS(Long Term Support)는 일반적인 경우보다 장기간에 걸쳐 지원하도록 특별히 고안된 소프트웨어의 버전 또는 에디션이다.
docker images
위의 명령어를 통해 해당 이미지가 잘 받아와졌는지 확인.
2) 받아온 이미지를 docker 컨테이너에 올린다.
docker run --name jenkins-docker -d -p 8080:8080 -p 50000:50000 -v /home/jenkins:/var/jenkins_home -u root jenkins/jenkins:lts
-d 옵션: 백그라운드로 컨테이너 구동
-p 포트 포워딩: EC2 8080 포트를 docker의 8080로 바인딩
docker ps
컨테이너를 구동한 뒤 현재 돌고있는 컨테이너를 위의 명령어로 확인하면 다음과 같이 로그가 뜬다.
여기까지 했을 때 해당 'http://{jenkins_server_public_ip}:8080'로 들어가게 된다면.... 아무화면이 안 뜰것이다.
왜??
inbound rule 규칙을 적용해주지 않았기 때문이다.
3) inbound rule 규칙 적용
AWS EC2 콘솔에서 다음과 같이 '네트워크 및 보안' 탭을 클릭한다. 그 뒤 '보안 그룹'에 들어간다.
Jenkins server의 보안 그룹 이름을 기억한 뒤 그 보안그룹 이름을 클릭한다.
default 보안그룹이 다음과 같이 나와 있고, 우리는 TCP 8080포트를 열어주기 위해 오른쪽 상단 인바운드 규칙 편집을 클릭한다.
다음과 같이 Inbound 규칙에서 IPV4로 0.0.0.0/0를 입력한 뒤 규칙저장을 해준다.
그런 뒤, 해당 'http://{jenkins_server_public_ip}:8080'을 통해 들어가게 되면 다음과 같은 창이 뜬다.
Jenkins에서 password를 치라고 한다. 초기 Jenkins를 실행하면 해당 패스워드를 발급해주는데,
이는 Jenkins의 ubuntu 서버에서 다음과 같이 명령어를 치게 되면 나온다.
docker logs jenkins-docker
다음과 같이 패스워드를 띄워주게 된다.
해당 패스워드를 입력해주면, 다음과 같은 화면으로 넘어간다.
Install suggested plugins를 클릭한 뒤 필요한 플러그인을 다운 받는다.
패키지 설치를 한 뒤 다음 화면이 나오게 되면 계정명, 암호 등 입력한다.
입력한 뒤 다음과 같이 Jenkins URL을 등록하라고 한다. 기존에 있던거 그대로 하면 된다.
그럼 다음과 같이 드디어 Jenkins Dashboard가 뜨게 된다. 🔥🔥🔥🔥
생각보다 내용이 많아 이정도로 한 뒤 2편에서 이어서 정리하도록 하겠습니다~~
2편 내용: Jenkins로 Spring project 빌드 하기 (Github hook trigger 설정 포함)
'기타' 카테고리의 다른 글
Jenkins 활용해서 Spring boot 서버 배포하기 - 2 (0) 2021.12.13 개인정보 처리방침 (0) 2021.03.18