인프라

Jenkins를 이용한 서버 배포

user-anonymous 2021. 1. 17. 13:11
728x90

MSA구조를 도입하게 되면서, 여러 서버들을 간편하고 쉽게 배포하기 위해 이번엔 AWS의 code pipeline 대신 jenkins의 빌드를 사용해 배포했다. 

 

배포하고 싶은 api 서버는 

- gradle 

- spring boot 

로 구성되어있다.

 

즉 boot 프로젝트의 jar 파일을 ec2 리눅스 서버에다가 풀어 실행하려 한다. 

 

1. Jenkins 관리 

2. 플러그인 관리 

   - Github 

   - Github Branch Source

   - Gradle Plugin

   - GitHub Integration Plugin

 

를 설치해주었다. 

 

이제 서버를 배포하기 위한 새로운 아이템을 만들어 보도록 하겠다.

 

왼쪽 하단에 위치한 새로운 item으로 들어간다. 

지정해주고 싶은 서버의 이름을 입력하고, FreeStyle project 를 선택한다. 

만약,, 같은 환경의 서버를 여러개 만들어야할 때는 맨 하단에 위치한 item 설정 복사 기능으로, 이미 존재하는 item으로부터 손쉽게 환경을 복사해 만들 수 있다.

 

 

 

이제 새로운item을 생성할때 설정화면이 나오게 된다. 

 

## General

1. 나는 오래된 빌드 삭제 기능을 적용시켜주었다. 

    - 빌드 유지기간은 5일이며, 보관할 최대 개수는 3으로 지정했다.

 

2. JDK

  - openJdk8로 지정

 

## 소스코드관리

1. 코드관리는 Git을 사용하였다. 

   - 레포지토리의 URL와 자격계정을 등록한다. 

 Repositories : 빌드하고싶은 레포지토리 url 및 계정 등록

 Branches to build : 내가 빌드하고싶은 브랜치를 입력 -->  dev브랜치 

 

 

4. Build

 

Build step 추가해야할 단계

- Invoke Gradle Script

- Send Files or execute commands over SSH

 

1. Gradle version 및 실행할 명령어 입력

  - Gradle version 

  - Task : bootJar --> jar파일 생성

2.  Send Files or execute commands over SSH : 파일 전송 및 실행시키기 위한 명령어 입력

  - SSH server : 내가 보내고 싶은 서버등록한다. 

  - 명령어  

# 기존에 있던 test jar를 .old로 이동시켜준다.
sudo mv /usr/share/api/test-0.0.1-SNAPSHOT.jar   /usr/share/api/test-0.0.1-SNAPSHOT.jar.old

# libs의 test*.jar 파일을 api_server로 이동
sudo mv -f build/libs/test*.jar /usr/share/api_server

#해당 jar을 실행시켜주는 shell script 파일 실행
sudo service test restart

# .old 파일 삭제
sudo rm -rf /usr/share/api/test-0.0.1-SNAPSHOT.jar.old
echo "DEPOLYMENT.........COMPLETED........OK"

 

위와 같이 입력해주었다.

 

그러고나서 저장후 Build Now를 누르고 나서 Console output 을 볼 때

1. Jenkins가 위치한 서버의 workingspace에 해당 item directory를 만든다.

2. 깃허브 자격을 증명한다.

3. 깃 레포지토리를 clone한다 :: jenkins서버가 위치한 jenkins_home/workspace/item에 

4. dev 브랜치의 최신 커밋을 가져온다

5. gradle -> bootJar 명령어 실행

6. ssh host 연결을 시도한다.

 --- Build 단계

7. 앞서 등록한 명령어를 실행해준다. 

 

 

build 성공 확인 방법

- 해당 서버로 들어가 

ps -ef |grep $프로세스 이름

 

할 경우 성공적으로 실행하고 있다면 빌드가 제대로 된 것임을 알 수 있다.

 

- 아직 GIT push 를 할경우 지속적인 배포단계는 포함하지 않았다.

728x90
반응형