ec2에 Jenkins CI/CD 적용기 (트러블 슈팅)

yeezze·2022년 9월 5일
0

나 정말 너무너무 뿌듯하니까 이걸 바로 남겨야겠다!!!!!!!!!! 🥺

무슨 일이 있었냐면..

프로젝트에 CI/CD 구축을 해본 적이 없어서 내가 강력하게 젠킨스를 사용해보고 싶다고 주장해서 8월말 하루에 서버분들과 만나서 적용시켰었다. 변경사항이 있을 때마다 수동으로 항상 ec2에 들어가서 배포 시키는 것도 꽤나 귀찮은 작업이었기도 했고...

그런데 우리 셋 다 젠킨스를 사용해본적이 없어서 구글링을 하며 몇시간 동안 고군분투했지만 결과적으로는 적용을 못 시켰다. 대부분의 케이스들이 별도의 젠킨스 서버를 두고 jar 파일을 생성 후 배포 서버로 파일만 넘겨 배포시키는 구조였다. 우리는 ec2 하나의 서버에서 애플리케이션, 젠킨스 같이 실행시키고 싶었는데 처음 적용시키다 보니 실패하였다.


그래서 젠킨스를 방치해두고 이러한 의견으로 가고있었는데..

내가 처음에 해보자고 하기도 했고 오기가 생겨서 젠킨스 적용을 성공해내고 말겠다는 의지가 생겼다. 🥶

트러블 슈팅 과정

git에 프로젝트가 업데이트 되자마자 젠킨스가 자동으로 실행되는 것은 잘된다.
그리고 ec2에 설정해놓은 sh 파일을 이용해서 젠킨스가 빌드, 배포까지 잘 시키는 것처럼 콘솔에 출력이 되는데 왠일인지 서버가 정상적으로 실행이 되지않았다.

왤까? ㄱ-


콘솔창 출력 마지막 부분을 보면 분명히 스프링이 실행이 됐는데...
jar 파일 경로도 올바르고.....

그래서 프로세스가 잘 떠있는지 확인해봤다.

젠킨스는 잘 돌아가고 있는데 스프링(5000)이 안 보였다
그말인 즉슨 스프링이 제대로 실행이 안됐다는건데........

근데 분명히 젠킨스 콘솔에서 실행됐는데....?

롸?ㅋ 🙄

정상적으로 돌아갔을 때 프로세스랑 비교해보니

확실히 뭔가 잘못됐다. 정상적일 때는 5000번 잘 떠있음

왜안될까 왜안될까

기존에 떠있는 프로세스 죽이는 것은 성공했으니 sh 파일은 제대로 실행되는 것 같고 nohup으로 jar 파일 실행하는 명령이 제대로 안된다고 생각이 들었다.

  • jar 파일 경로를 잘못썼나? -> 아님 제대로 썼음

tmi : 젠킨스 네가 이기나 내가 이기나 해보자 하다가 오늘 수영도 못 감
서버 팀원들이랑 같이 해결해보려고 회의 때 내가 알아낸 이러한 과정을 얘기했다!

해결했다 🥺

jar 파일 권한 문제였다. 실행 권한(x)이 없어서 nohup 명령이 제대로 안 돌아갔던 것
실행이 안되는 것을 파악했을 때 가장 먼저 떠올렸어야했는데 정확한 원인을 찾기까지 시간이 꽤 걸렸다.
권한 변경 후 해결했다. (nohup 앞에 sudo를 붙여도 된다)

CI/CD 구축 완료 및 서버 분리

이제 github에 머지가 되면 자동으로 젠킨스에서 운영서버에 빌드 후 배포를 돌린다!
젠킨스를 해결한 김에 이번 회의에서 prod, dev로 서버도 분리했다.

서버 팀원들은 각자 개발 후 dev 서버로 머지를 한다.
dev 서버에 젠킨스가 자동으로 배포를 시켜주면, 안드로이드에서 변경 사항을 반영해서 test를 진행한다.
안드로이드에서도 정상적으로 test가 완료되면 dev -> prod로 머지시키고 최종적으로 운영서버에 배포를 완료한다.
물론 prod도 머지만 하면 젠킨스가 알아서 배포해준다! 🤩

느낀 것

예전 프로젝트에서는 머지 후 터미널을 통해 서버에 직접 접속해서 수동으로 git pull, build, kill, 배포를 진행했었다.
할 때마다 굉장히 귀찮은 작업이었는데 이번 프로젝트에서는 한단계 성장한 것 같아 매우 뿌듯하다.
리눅스 서버로 배포 과정을 직접 경험하면서 네트워크나 프로세스 관련 부분에서 직접 찾아보고 실행시켜보면서 알아가는게 많은 것 같다.
처음 터미널로 서버를 접속할 때는 괜히 무섭고 손대면 안될 것 같았는데 몇번의 프로젝트를 겪으며 직접 찾아보고 해결해보면서 재미를 느끼고 있다.
역시 포기하지 않으면 해결할 수 있다는 것!! 😆 아이 뿌듯해
그리고 항상 느끼는건 진짜 별거 아닌거 때문에 안된다. 별거 아닌게 사실 별거임


훈훈한 서버 톡방으로 마무리 😇

profile
백엔드 개발자 😊

0개의 댓글