[PROJECT] Jenkins 에 프로젝트 빌드 후 자동으로 배포하기
지금까지 EC2 의 젠킨스가 github에 올라온 프로젝트를 가져와 빌드하는 데 까지 했다.
이제 빌드한 뒤 자동으로 배포하는 기능을 만들어보자.
우선 환경에 따라 작성해야할 Script 가 매우 다를 수 있으므로,
나는 Springboot
, Maven
, EC2 에 설치된 건 Linux
다. 그리고 톰캣이 내장된 jar
파일을 사용할 거다. 톰캣까지 있으니.
시작 👊
준비물 :
EC2 에 깔린 젠킨스
우리는 빌드까지했으니, 빌드 후 젠킨스가 할 작업을 정해주면 모든 게 끝난다.
일단 순서를 생각해보면,
github 에 commit 되면, 업데이트 된 프로젝트를 젠킨스가 가져올 거고(GitHub hook trigger for GITScm polling
)
젠킨스는 가져와서 바로 빌드할 거다.
그 뒤에 빌드 후 조치
를 통해 바로 배포되도록 설정하는 게 마지막이다.
우리의 마지막 작업 , 빌드 후 조치
를 설정해보자
Post build task 설치
젠킨스에서
Post build task
플러그인을 설치해준다.우리 프로젝트의
구성
으로 와서 맨 및에빌드 후 조치
를 추가해주자.이름 그대로 빌드를 완성한 뒤에 하게 될 조치다.
전체
Task
를 보자.
빌드하면서Log text
에 지정한어떤 Log
가 나오면, 아래의Script
를 실행하자. 는 말이다.
매우 쉽죠?
- 하지만
Script
를 뭐를 적어야하는 지 몰라서 이틀을 끙끙앓았다.
일단이렇게 적어주자. #!/bin/bash fuser -n tcp -k 8080 BUILD_ID=dontKillMe java -jar target/{우리 프로젝트가 빌드되면서 만들어진 jar 파일}.jar &
- 지금 빌드 ▶
그러면 BUILD SUCCESS
가 나온 뒤 INFO
아래 쪽으로 Post build task
가 실행되는 걸 볼 수 있다.
post build task
까지 끝나면
이렇게 나오는데 Spring
그림이 나오지 않았다고 실망하지 않아도 된다.
{EC2 주소}:8080
으로 접속하면 해당 화면을 볼 수 있다.
어디서 본 화면 아닌가. 우리가 스프링 서버를 키고 브라우저로 localhost:8080
에 접속했을 때 보더 화면이다.
8080 으로 접속이 되지 않는다면, EC2의 보안그룹을 확인해 8080 포트가 열려있는지 확인해보자.
- 나는 스웨거를 사용하고 있으니 swagger 로 들어가보자.
매우 잘 표시가 된다. swagger 를 이용해 user 등록한 뒤 post 를 적어보자
- 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 배포 참고