티스토리 뷰

반응형

지난 글에서 Jenkins에서 VM인스턴스에 SSH로 접속하도록 설정하는 과정을 설명했다.

 

이번에는 JenkinsGithub Webhooks를 이용하여 배포를 자동화하는 방법에 대해 알아보자.

 

프로젝트를 만드는 방법과, Git과 Github를 사용하는 방법에 대해서는 생략하겠다.

 

 


1. Jenkins에서 새로운 Item 생성하기

Jenkins의 대시보드에서 새로운 Item을 생성하자.

 

 

Item의 이름을 입력하고 Freestyle project를 선택하고 OK를 클릭하자.

 

 


2. Github와 연동하기

OK를 눌러 Item을 생성하면, 아래와 같은 내용들을 설정할 수 있는 창이 나온다.

 

또는 Jenkins에서 생성한 Item에서 구성을 클릭하면 위의 내용들을 변경할 수도 있다.

 

소스 코드 관리에서 Git을 선택한 후, java 프로젝트 코드가 저장된 git의 url을 Repository URL에 입력해 주자.

url 입력시 아래와 같은 에러가 발생할 수도 있는데 Jenkins 인스턴스에 Git이 설치되어 있지 않아서 생기는 문제이다.

따라서 Git을 설치해 주어야 한다.

 

 

아래의 스크립트를 통해 Jenkins VM인스턴스에 Git을 설치해 주도록 하자.

<noMenu/>
sudo yum -y install git

 

git url 설정 후 스크롤을 밑으로 내리면 빌드할 branch를 선택할 수 있다.

default로 */master 가 설정되어 있는데 사용할 branch를 적어주면 된다.

 

Github의 webhooks를 사용하기 위해 빌드유발의 GitHub hook trigger for GITScm polling에 체크해 주자.

 


3. Build 설정

jar파일을 생성하려면 gradle을 이용하여 java 프로젝트를 build해야 한다.

Build 항목에서 Add build step을 눌러 Execute shell를 추가하자.

이후, Command에 아래의 스크립트를 입력해 주면 된다.

<noMenu/>
chmod 544 ./gradlew
./gradlew clean build

 

 


4. 빌드 후 조치

빌드 후 조치 설정을 하기전에 몇가지 설정할 내용들이 있다.

우선 워커 인스턴스(이전에 Jenkins관리 시스템 설정에서 추가한 SSH서버)에 설치해 주어야 할 것들이 있다.

배포를 할때, 사용중인 포트에 실행중인 프로세스를 먼저 종료를 하고 새로운 파일을 실행시켜야 한다.

이때 lsof 명령어를 사용해야 하는데, Cent OS에서 기본제공 해주는 명령어가 아니기 때문에 lsof를 설치해 주어야 한다. 워커 인스턴스에 아래의 스크립트를 입력하여 lsof를 설치해 주자.

<noMenu/>
sudo yum -y install lsof

또한 프로젝트를 실행하려면 java가 설치되어 있어야 한다. 아래의 yum list 스크립트를 통해 java버전을 검색하고 프로젝트에 맞는 java 버전을 설치하자.

<noMenu/>
yum list java*jdk-devel
sudo yum -y install java-11-openjdk-devel.x86_64

마지막으로 Jenkins를 통해 배포를 하고 있고, Jenkins의 port를 8080으로 설정해 놓았기 때문에

application의 port를 8080으로 설정해 주어야 한다. (application.yaml 파일의 server:port: 8080 설정)

 

 

이제 위에서 빌드된 jar파일을 빌드 후 조치 설정을 통해 배포를 시켜야 한다.

빌드 후 조치 항목에서 Send build artifacts over SSH를 추가해 주자.

 

그럼 아래와 같은 항목이 추가되는데,

Name에서는 이전에 Jenkins관리의 시스템 설정에서 추가한 SSH서버들을 선택할 수 있다.

인스턴스를 선택한 후, 고급을 누르면 Verbose output in console 항목을 선택할 수 있다.

해당 옵션을 선택하면 빌드할 때 상세 내역을 확인할 수 있다는 장점이 있다.

 

그 다음 Transfers에는 아래와 같은 정보를 입력해 주자.

1. Source files경로는 아래와 같이 build/libs/{프로젝트명}-0.0.1-SNAPSHOT.jar 를 입력한다.

    추후에 경로가 달라질 수도 있는데, 정확한 경로를 확인하려면 프로젝트에서 gradle을 통해 build를 하고 jar파일의 위치      를 확인해야 한다.

build 후 생성된 jar파일 경로

2. Remove prefix에는 1에서 입력한 jar파일 앞의 모든 디렉토리 경로를 적어주자. (아래의 그림 확인)

3. Exec command에는 프로젝트명을 바꾸어 아래와 같은 스크립트를 적어주자.

<noMenu/>
sudo kill -15 $(sudo lsof -t -i:8080)
nohup sudo java -jar {프로젝트명}-0.0.1-SNAPSHOT.jar > nohup.out 2>&1 &

 nohup.out 파일을 생성하여 배포중 log들을 확인할 수 있도록 설정했다.

상위 디렉토리(~)에서 아래의 스크립트를 입력하면 로그를 확인할 수 있다.

<noMenu/>
tail -f nohup.out

일단 워커 인스턴스는 하나만 설정하여 배포하도록 한다.

다음 포스팅 글에서, Nginx를 이용한 로드밸런싱 설정을 하면서 추가할 예정이다.

 

 

 


5. Github webhooks 설정

settings -> Webhooks 에서 Add webhook을 눌러 webhook설정 할 수 있다.

Add webhook을 누르고 나서, 아래와 같이 정보를 입력하여 webhook을 추가해 주자.

Payload URL에는 Jenkins 인스턴스의 외부 IP와 함께 아래와 같이 작성한다.

    예시) http://{외부IP}:8080/github-webhook/

Content type은 json으로 변경해 주자.

 

 

잘 설정 되었다면 아래의 그림처럼 초록색 체크표시를 확인할 수 있다.

 


6. 배포 자동화 확인하기

Jenkins와 연동한 Git 레포에 아무 내용이나 push를 해보자.

생성한 Item의 build history에 자동으로 빌드된 내용을 확인할 수 있다.

Console Output을 클릭하여 배포가 잘 이루어 졌는지 확인해 보자.

 

배포가 잘 이루어 졌다면 워커 인스턴스의 외부 IP를 이용하여 프로젝트의 컨트롤러를 호출해 보자.

 

 

 

 

다음으로, 무중단 배포를 위해 Nginx를 이용하여 로드밸런싱을 하는 방법에 대해 알아보자.

 

 

 

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함