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 를 할경우 지속적인 배포단계는 포함하지 않았다.
'인프라' 카테고리의 다른 글
[ Netflix OSS ] Zuul timeout error (0) | 2023.01.29 |
---|---|
Jenkins를 통한 React.js 자동 배포 [Nginx] (0) | 2021.07.18 |
Nginx 다중 포트 연결 (0) | 2021.01.17 |
PSCP 이용하여 AWS/EC2 파일 전송 및 폴더 전송하기 (0) | 2020.10.12 |
Elastic Beanstalk, EC2 (0) | 2020.09.26 |