Jenkins Spring(REST) & React 배포 1 (BACK)
Project를 하면서 한번도 써본적 없는 Jenkins로 배포하기가 쉽지 않았다.....;
Jenkins 구현한것
git push & merge -> merge request label에 따라 프론트 백 트리거 일어남 -> jenkins가 트리거에 따라서 알아서 빌드 후 서버 실행시켜줌 (우분투 EC2 환경에서)
나도 아직 공부하는 학생이고 정확하지는 않지만 차차 읽으면서 진행하면 쉽게 실행은?(맞는건 아닐지도...)
될거란 생각이 든다.
뭐 설치나 이런것들은 대부분 다른 사이트들도 잘알려주고 찾으면 쉽게 할 수 있으니 그런것들은 생략하고
내가 어려워하고 헤맸던 부분을 중점으로 다뤄 보고자 한다. 완벽하게 아는 것이 아니라 이상한것도, 틀린것도 많겠지만 나중에 다시보면 틀린것이 부끄러워서 고치겠거니.... 하는 생각으로 올려본다.
Spring은 Gradle로 짰다.
새로운 아이템 눌러서 만드는 것까지는 그냥 찾아보고 쉽게 했지만 설정부터 쉽지 않았다...
위에서부터 차례로 설명해 보겠다.
소스코드 관리

나는 SSAFY에서 주는 gitlab을 사용해서 거기에 연결했다.
Credential 부분은 jenkins에서 미리 등록해 두었던 내용이고 gitlab계정 정보였다.
용감하고 무식하게 했지만 한참 틀리다 보니 브랜치 설정이 틀렸었다.... develop이라는 브랜치 생성해서 작업했는데 jenkins는 열심히 master로 하고 있었다.. 만약 다르다면 맞춰 주어야 한다.
빌드 유발

어떤 상황에서 빌드를 유발할 것인가에 관련된 부분인데 별표친 부분을 유심히 보면 될거 같다.
첫번째 별은 깃랩에 변동사항이 생기면 빌드를 유발한다는 내용이고 깃랩에 웹훅을 달아야 한다.
깃랩 웹훅

깃랩에서 레포지토리 설정을 잘찾아보면 웹훅 부분이 있다.
여기에 웹훅을 달아줘야 깃랩이랑 젠킨스가 연결된다.
사진에서 URL 부분에는 아까 젠킨스에서 보았던 URL을 복사에서 넣으면 되고,
아래에 Secret Token에도 젠킨스에서 Generate 눌러서 생성된 값을 복사해서 넣으면 된다.
아래에는 원하는 트리거를 선택하면 된다. 나는 push event 는 푸쉬할때마다 일어나서 난리였고 Merge Request Events 를 사용했다.
다시 젠킨스로 돌아와서 두번째별표에 있는 내용을 이용해서 Merge Request에 특정한 라벨이 달렸을 때만 빌드 되도록 했다... 저부분도 깃랩에서 Label이라는 부분이 있는데 미리 만들어 두면 젠킨스가 유효한 라벨인지 체크해준다.

빌드 환경
빌드 환경 부분인데 이부분은 dockerhub랑 연결하다 보니 사용하게 되었다. 사용안한다면 지나가도 될거 같다.
사용한다면 미리만들어둔 Credential을 변수처럼 사용하는 것이다. 나중에 쓸일이 있다.
Gradle 빌드

사실 이부분이 제일 어려웠고 많이 헤맸다.... 아니 계속 gradlew가 없다고 나왔었다...
그건 위에있는것처럼 레포지토리에서 gradlew가 있는 곳을 안 잡아 줬더니 못찾았다.... 너무 젠킨스가 스마트하고 생각했었던거 같다;; 그래서 아래서 root build script 저부분에 위치 잡아 주었고 빌드할 파일도 잡아 주었다.
그리고 Tasks 부분은 대부분 build clean 이런식으로 두개만 넣던데 잘 안되는 거 같아서 내가 쓰던 명령어를 걍 때려넣었다.... 맞는지는 모르지만 일단 결과는 성공적 ㅎ
빌드후 조치

사실 이부분이 혼란의 끝이었다. 빌드하는 건 성공했지만 그이후는...? 이라는 생각이 들때쯤 찾다 보니 shell 스크립트를 칠수 있었다. 나는 여기서 그냥 명령어들을 때려넣었지만 다른분들을 보니 deploy.sh 이라는 파일을 만들어서 내부에다가 실행시킬 명령어를 쳐서 그파일을 실행시키시는 분들도 많았다. 하지만 난 일단 되는게 중요했기 때문에 여기다 했다.
shell 내부에는 도커 명령어들이 있는데 이부분은 빌드 이후에 수행할 명령어들을 넣으면 된다. 뭔가 유의미한 내용들이 잔뜩 들어있는거 같지만 틀린부분도 많이 있을 것이다. 일단 되니까 그대로 두었다....(나중에 공부해서 고쳐야겠네..;)
나는 도커를 이용했기 때문에 도커로 이미지를 만들었고 그걸 실행 시키는 쪽으로 넣었다.
(막 dockerhub 올리고 받고 하는데 그냥 이미지 만들고 실행시켜도 된다.)
아 참고로 dockerfile

사실 공부하면서 하다보니 클린하고 완벽한 코드는 아니지만 나름 오랜시간 찾아보고 고민하면서 했더니 실력이 성장한거 같기는 하다. 프로젝트가 마무리 되면 좀 더 깨끗하고 보기 좋게 다시 업로드 해볼까 라는 생각을 한다.(생각을 일단 하긴 했다는 점이 중요). 혹시나 글을 읽고 문제점을 발견하시거나 이상한거 있으면 댓글로 알려주시면 감사하겠다. 그리고 누군가에게는 도움이 되길 바란다. 따끔한 조언은 감사, 궁금하거나 도움이 필요하면 댓글! 이만!