[PROJECT] Jenkins 에 프로젝트 빌드 후 자동으로 배포하기

THOVY·2022년 12월 3일
0

PROJECT

목록 보기
14/20
post-thumbnail

지금까지 EC2 의 젠킨스가 github에 올라온 프로젝트를 가져와 빌드하는 데 까지 했다.

이제 빌드한 뒤 자동으로 배포하는 기능을 만들어보자.

우선 환경에 따라 작성해야할 Script 가 매우 다를 수 있으므로,
나는 Springboot, Maven, EC2 에 설치된 건 Linux 다. 그리고 톰캣이 내장된 jar 파일을 사용할 거다. 톰캣까지 있으니.

시작 👊

준비물 : EC2 에 깔린 젠킨스

우리는 빌드까지했으니, 빌드 후 젠킨스가 할 작업을 정해주면 모든 게 끝난다.

일단 순서를 생각해보면,
github 에 commit 되면, 업데이트 된 프로젝트를 젠킨스가 가져올 거고(GitHub hook trigger for GITScm polling)
젠킨스는 가져와서 바로 빌드할 거다.
그 뒤에 빌드 후 조치
를 통해 바로 배포되도록 설정하는 게 마지막이다.

우리의 마지막 작업 , 빌드 후 조치를 설정해보자

Post build task 설치

  1. 젠킨스에서 Post build task 플러그인을 설치해준다.
  2. 우리 프로젝트의 구성 으로 와서 맨 및에 빌드 후 조치 를 추가해주자.
  3. 이름 그대로 빌드를 완성한 뒤에 하게 될 조치다.
  4. 전체 Task 를 보자.
    빌드하면서 Log text 에 지정한 어떤 Log 가 나오면, 아래의 Script를 실행하자. 는 말이다.

    매우 쉽죠?
  5. 하지만 Script 를 뭐를 적어야하는 지 몰라서 이틀을 끙끙앓았다.
    일단
#!/bin/bash
fuser -n tcp -k 8080
BUILD_ID=dontKillMe java -jar target/{우리 프로젝트가 빌드되면서 만들어진 jar 파일}.jar &

이렇게 적어주자.

  1. 지금 빌드 ▶

    그러면 BUILD SUCCESS 가 나온 뒤 INFO 아래 쪽으로 Post build task 가 실행되는 걸 볼 수 있다.

  2. post build task 까지 끝나면

    이렇게 나오는데 Spring 그림이 나오지 않았다고 실망하지 않아도 된다.

  3. {EC2 주소}:8080 으로 접속하면 해당 화면을 볼 수 있다.

    어디서 본 화면 아닌가. 우리가 스프링 서버를 키고 브라우저로 localhost:8080 에 접속했을 때 보더 화면이다.

8080 으로 접속이 되지 않는다면, EC2의 보안그룹을 확인해 8080 포트가 열려있는지 확인해보자.

  1. 나는 스웨거를 사용하고 있으니 swagger 로 들어가보자.

매우 잘 표시가 된다. swagger 를 이용해 user 등록한 뒤 post 를 적어보자

  1. RDS 에 올려진 데이터베이스에 잘 저장 되어야겠지? heide 를 통해 확인해보면

이렇게하면 우리는 백엔드와 데이터베이스를 모두 배포한 거다.
하지만

휴대폰으로도 접속이 된다. 😂

아무나 이렇게 접속하면 안 되겠지? 우리의 프론트엔드만 접속할 수 있도록 ip 를 설정해줘야한다. 지금은 0.0.0.0 모두 들어올 수 있기 때문에 모두가 스웨거에 접속할 수 있고, 모두가 RDS 에 데이터를 적재할 수 있는 상황이다. 그러면 어떤 일이 일어날지 알 수 없다. 카드값 폭탄 맛을지도?!

매우 힘든 Script

linux 명령어를 하나도 모르는 나는 매우매우 고전했다. nohup 함부로 썼다가 EC2 가 한없이 돌아가면서 꺼지지도 않고 EC2 인스턴스를 종료시켜야했다. 거의 6번정도 종료시킨 것 같다. 이것저것 해보다가...

SSH 를 이용해 조금 더 보안에 신경쓰기도하고 하는데 일단 참아보자. 일단 우리는 github 에 public 으로 올라간 프로젝트이기 때문에 git을 가져올 때도 어떤 것도 필요없다. private 이라면 가져올 때 git 계정 token 이 필요하다.

이번에 느낀 건 배포를 할 때는 정말 많은 상황이 있고 정말 다양한 코드로 배포를 할 수 있다.
나는 그 중에 정말 정말 쉬운 코드를 이용해서 배포를 한 거다.

간단해서 문제가 되는 부분도 있을 거다.
test 를 실행하면 EC2 가 멈춰버려서 test 는 스킵했는데, 왜 그런지도 모른다.
사용하는 방법이 까다로워 진다면 다 그럴만한 이유가 있을진데, 더 공부를 많이 해야한다.
갈길이 멀다 도비야

멍청해지지 않도록 노력하자!

참고
test 오류 stackoverflow
linux 명령어
Maven 젠킨스 배포
mvn Docs
mvn 명령어
Jenkins Error Docs
SpringBoot Jenkins 배포 참고

profile
BEAT A SHOTGUN

1개의 댓글

comment-user-thumbnail
2023년 2월 4일

혹시 빌드 후 조치에서 실행한 것들의 기록은 어디서 볼 수 있나요?

답글 달기