[Springboot] Jenkins CI/CD 무중단 배포

송진영·2022년 5월 20일
1

Springboot

목록 보기
4/9

Jenkins CI/CD 무중단 배포

Github 서버와 연동

Access Token 생성

프로필 - Settings - Develop settings로 들어가서 access token을 생성해준다.
한 번 생성한 토큰은 다시 확인할 수 없으니 어딘가에 저장을 해두어야 한다.

Jenkins Github Token 입력

Jenkins 관리 - 시스템 설정으로 들어가서 Github 세션에서 Add github Server - Github Server 를 클릭하고, Credentials 부분의 Add - Jenkins 를 클릭한다.

Secret text로 설정을 하고 Secret text에 아까 받은 Access Token을 입력하고 ID에 Github username을 입력한다.


Test connection을 눌러서 연결이 잘 되었는지 확인해본다.
위와 같이 뜨지만 문제는 없는 것 같다.

Jenkins Project 생성 후 WebHook 설정

새로운 Item을 Freestyle project로 만들어준다.

Kind는 Username with password 로 설정하고, Username 은 자신의 깃허브 ID, Password에는 깃허브 계정 비밀번호를 입력한다.
그리고 특정 브랜치에 변경이 일어났을 때 이를 감지할 브랜치를 Branch to build 옵션에서 지정해줄 수 있다. 나는 develop 브랜치를 default로 사용하기 때문에 */develop 와 같이 추가해주었다.


위와 같은 Failed to connect to repository 오류가 뜨는데 git repository가 private으로 지정되어 있어서 접근 권한이 없어서 그런 것이니 git repository를 public으로 바꾸고 새로고침 하면 해결이 된다.
그리고 빌드 유발 섹션에서 Github hook tigger for GITScm polling 을 선택한다.

Github WebHook 설정

다음에는 github repository의 settings - webhooks에서 Add webhook 클릭하고 Payload URL에 EC2 IP 주소에 /github-webhook/ (마지막에 '/'를 꼭 붙여야 한다.)을 추가한 URL을 넣고, Content type을 application/json으로 바꾸고 Add webhook을 누른다.

WebHook Test

이제 git에 push를 했을 때 EC2에 자동으로 Pull이 되는지 확인해보기 위해 push를 해보면 된다.

Jenkins에서 만든 프로젝트의 history를 통해 console 결과를 확인할 수 있다.

콘솔에 나오는 /var/lib/jenkins/workspace/CICD_Phonedyguard로 들어가면 제대로 pull이 되었는지 확인할 수 있다.

CD 및 쉘 스크립트 실행 구축

위에서 작업한 CI를 통해서 변경 사항이 있는 코드를 서버에 자동으로 가져올 수 있게 되었다.
이제 git에서 가져온 코드를 가지고 Gradle을 이용해 실행 파일(Jar)를 만들고 실행 중인 IDLE 상태의 스프링 서버가 이를 실행 시킨다. 이후 Nginx 가 해당 서버를 CURRENT 상태로 가리켜 배포를 완료하도록 한다.

Gradle로 Jar파일 만들기

젠킨스 관리 - Global tool configuration 설정으로 들어간다.

Gradle 섹션에서 Add Gradle 클릭 후 최신 버전의 Gradle을 선택하고 저장해준다.

SSH로 배포 및 쉘 스크립트 실행

그러고 만들어둔 Project Item의 구성에서 Build로 가서 Add build step - Invoke Gradle에서 다음과 같이 설정해준다.

아래의 고급을 클릭하여 다음과 같이 설정해준다.

이렇게 하면 CI 과정을 거쳐 자동으로 /var/lib/jenkins/workspace/CICD_Phonedyguard 경로에 실행 파일을 생성한다.
그러고 나서 젠킨스 관리 - 플러그인 관리로 들어가서 Publish Over SSH 플러그인을 설치한다.

젠킨스 관리 - 시스템 설정으로 들어가서 Publish over SSH 섹션으로 가서 키 .pem 파일을 메모장으로 열어서 값을 복사해서 붙여넣는다.


Name: 임의의 이름
Hostname: EC2의 퍼블릭 IPv4 DNS 값
Username: 접속하려는 서버의 user 이름
Remote Directory: EC2 프로젝트 디렉토리
위의 정보를 입력하고 Test Configuration을 눌러서 Success가 뜨면 연결 성공이다.
다음으로는 만들어 놓은 Item으로 가성 구성 - 빌드 후 조치 - Send build artifacts over SSH로 가서 설정을 해준다.

Sources files: jar 파일 경로 및 이름
Remove prefix: 배포하려는 파일이 속해 있는 디렉터리 정보를 제거하기 위해 필요
Remote directory: 배포하려는 디렉터리의 위치
Exec command: ssh 배포 후 실행하는 명령어 - deploy.sh를 실행한다.
/dev/null 2>&1은 표준 출력과 표준 입력을 버리는 것으로, 이것을 적지 않으면 젠킨스가 쉘 스크립트를 실행한 후 빠져나오지 못하게 되므로 반드시 붙여줘야 한다.

git에 push를 한 후 success가 된다면 성공이다.

참고자료: 만렙 개발자

profile
못하는 건 없다. 단지 그만큼 노력을 안 할 뿐이다.

0개의 댓글