Hi yoahn 개발블로그

프로젝트에 젠킨스를 이용한 CI & 자동 배포 적용기 본문

프로젝트 개발 일지

프로젝트에 젠킨스를 이용한 CI & 자동 배포 적용기

hi._.0seon 2021. 8. 26. 22:01
반응형

프로젝트를 진행하는 과정에서 배포를 내가 담당했는데, 서버에서 매번 git을 통해 jar 파일을 다운받아서 작성해둔 쉘 스크립트를 실행시키는 방식으로 했었다.

그런데 어쩌다가 나 말고 같이 진행하던 다른 사람이 배포를 시도하게 된 일이 있었는데, jar 파일 만드는 것부터 bitbucket이라 git url 접근 권한도 다르고 여러 문제가 발생하면서 멘토님이 내가 없어도 배포가 가능할 수 있게 Jenkins를 적용해보라고 인스턴스를 띄워주셔서 젠킨스를 통해 CI를 적용해 보게 되었다!

 

젠킨스는 요약하면
특정 브랜치에 올라온 커밋을 인식해서 젠킨스에서 풀 받아오고, 풀 받아온 코드를 가지고 빌드해서 쉘 스크립트를 실행하는 것
쉘 스크립트에 따라 배포 방식이 결정되는것 같다.

 

먼저 젠킨스를 사용하려면 젠킨스가 서버에 띄워져 있어야 한다. 프로젝트가 띄워지는 인스턴스와 같은 인스턴스에 올리는 방법도 있지만 인스턴스가 무거워질 수 있으니 분리하는게 좋은 것 같다.

우리 프로젝트에서 적용한 방법은, 젠킨스 인스턴스를 따로 띄워서 젠킨스에서 코드를 받아와서 원격 ssh를 통해 서버 인스턴스에서 빌드 후 배포 파일을 실행시켰다.

반응형

CI 과정

1. Jenkins 플러그인 설치

spring boot 에서 gradle을 사용했기 때문에 Gradle 플러그인과, Post build task Plugin을 설치한다.

Jenkins 관리 > 플러그인 관리

설치 가능 탭을 클릭 후 검색 탭에서 필요한 플러그인을 설치한다.

젠킨스와 다른 ec2 인스턴스에 배포하는 경우 Publish over ssh 플러그인을 설치한다.

 

2. 젠킨스 아이템 생성 -> 빌드 설정

새로운 Item > Freestyle project 선택

  • 소스 코드 관리

- Credentials > Add > Jenkins

repository Git의 Username(ID)과 Password만 입력하면 된다.

 

Branches to build

> 빌드할 브랜치 이름을 적어둔다

해당 브랜치에 커밋이 올라오는 것을 인식해서 젠킨스에서 자동으로 빌드하게 된다.

 

  • 빌드 유발

Repository settings > Webhooks

> Add webhook

URL 부분에

- https://{jenkins 서버 주소}:8080/bitbucket-webhook/

을 넣고 원하는 이름으로 설정한 뒤 Save 버튼 클릭

 

  • Build

Tasks 에는 gradle로 실행할 작업을 적어준다.

bootjar만 하면 버전별로 jar 파일이 계속 남을 것 같아서 clean 후 bootjar 했다.

(깃에 올리지 않는 보안 파일들 때문에 사용할 수 없어서 안해도 되는것 같기도 하고..)

  • 빌드 후 조치

젠킨스와 같은 인스턴스에서 빌드하는 경우 여기 스크립트 부분에서 실행할 스크립트 내용을 적으면 된다.

  •  Publish over ssh

- 사전 설정: Send build artifacts over SSH

SSH 설정을 위해 Jenkins 관리 > 시스템 설정 에 들어가서 스크롤을 쭉 내리다 보면

Publish over SSH 부분이 나오는데, 아래 Key 부분 칸에

jenkins 인스턴스에서 생성한(존재하는) .ssh/id_rsa 키 값의 내용을 붙여넣으면 된다.

젠킨스에서 서버 ec2 인스턴스로 접속하기 위한 방법은 아래 링크 참고

2021.08.12 - [42 SEOUL/배운 것들 정리] - ssh 인스턴스 접속

 

ssh 인스턴스 접속

ssh를 통해 로컬에서 원격 인스턴스로 접속하거나 원격 인스턴스에서 원격 인스턴스로 접속하기 위해 해야하는 설정 1. cloud 서비스를 이용하는 경우 접속하려는 대상 서버에 접속 허용할 사용자

hi0seon.tistory.com

아래에 있는 ssh 서버 설정에서

- Name: 임의의 이름, jenkins item 설정시 사용됨

- Hostname: 빌드할 서버의 ip 주소

- Username: 서버에 접속할 user name

을 입력한다.

 

Post build task 끝에 있는 빌드 후 조치 추가 버튼을 눌러 Send build artifacts over ssh 를 선택하면 아래와 같은 칸이 생긴다.

jenkins item 빌드 설정

Name: 위에서 설정한 SSH 서버 name을 선택한다.

Source files: 파일을 서버에 업로드 한다. **/* 로 하면 git으로 받은 파일 전체가 ssh 서버로 전송된다.

Remote directory: file을 전송할 디렉토리 위치

Exec command: ssh 서버에서 실행할 명령

 

deploy.sh 파일에서 기존 돌아가던 프로세스는 죽이고 새로운 jar 파일을 빌드하여 java 로 실행시킨다.

nohup으로 하는 경우 출력 스트림이 끊기지 않아 서버는 실행되지만 timeout되어 jenkins에서 빌드에 실패했다고 하게 된다.

반응형

'프로젝트 개발 일지' 카테고리의 다른 글

[42GG] 3기 개발일지 2  (0) 2023.05.13
[42GG] 3기 개발일지 1  (0) 2023.04.21
SpringBoot OAuth + JWT  (0) 2022.05.31
[spring boot] json web token 에러  (0) 2022.05.31
[42Seoul] #1 구인구직 서비스 개발기  (0) 2021.02.22
Comments