이번 글에서는 jenkins에서 스프링부트 프로젝트를 github에서 가져와 빌드한 후 특정 서버로 .jar파일 형태로 전송하여 해당 .jar파일을 실행시키는 과정에 대해 알아보도록하자. (이 글에서 실습한 내용은 GCP 인스턴스 위의 젠킨스에서 -> AWS EC2 인스턴스로 파일 배포)
1. jenkins ssh 플러그인 설치
젠킨스에서 스프링부트 서버를 .jar파일로 생성하고 특정 서버로 전송하기 위해서는 ssh를 이용해야하는데, 젠킨스에서는 이를 플러그인으로 제공해준다. 아래와 같이 Publish Over SSH 플러그인을 설치하도록하자.
2. Publish over SSH 세팅
플러그인 설치가 완료되었다면 젠킨스의 시스템 설정으로 가서 아래와 같이 설정값 들을 입력하도록하자. 그런 후에 Test Configuration 버튼을 눌러서 정상적으로 연결되는지 확인하도록 하자. (Success 표시가 나오면 정상)
Key : 접속시에 필요한 private_key (여기서는 aws에서 발급받은 .pem 파일의 키값)
Name : 해당 SSH 설정의 이름
Hostname : SSH로 접속할 서버의 도메인
Username : SSH로 접속할때 필요한 Name
Remote Directory : 파일전송시 root가 되는 디렉토리
위의 설정이 완료되었다면, 다시 프로젝트 구성으로 이동하여 빌드 후 조치 스텝(Send build artifacts over SSH)을 추가하도록하자.
해당 위처럼 해당 빌드 후 조치스텝으로 Send build artifacts over SSH 을 선택하고 아래와 같이 입력하도록하자.
* 위에서 Execute shell에 jar파일 실행 명령어는 테스트용으로 입력해둔것이고 추가할 필요없으니, 무시하도록하자
위의 항목들에 대해 간단히 설명은 아래와 같다.
Name: 제킨스 시스템 설정에서
Source files: 전송할 파일을 지정함. 위에선 빌드된 .jar 파일을 전송함
Remove prefix: Source files에서 지정한 경로의 하위 폴더를 지우는 기능. 위의 예시같이 입력한다면 폴더를 제외하고 .jar 파일만 전송됨
Remote directory: SSH Server로 지정한 서버의 원격지 폴더. 원격서버의 홈디렉토리/위에서 지정된 파일
ex) 위에선 AWS EC2로 전송하기 때문에 /home/ec2-user/jenkins-dev 하위로 파일을 전송함
Exec command: 파일 전송 이후에 SSH Server로 지정한 서버에서 실행될 스크립트를 지정할 수 있는 기능
입력된 내용을 보면, 위의 시스템 설정에서 설정한 AWS EC2 인스턴스의 홈디렉토리가 "/home/ec2-user"이기 때문에 해당 디렉토리 하위에 jenkins-dev 디렉토리가 생성되고, 그 하위에 jar를 파일이 배포될 것이다. 그리고 배포된 jar 파일을 실행시키는 스크립트는 전체경로를 적어주도록하자.
만약 스크립트에 기존에 실행되고있는 jar파일 프로세스를 종료시키고 싶다면, 아래의 명령어를 Exec command 첫줄에 추가하도록하자.
# jenkins-0.0.1-SNAPSHOT.jar PID를 가져와서 kill 프로세스 적용
sudo kill -9 `pgrep -f jenkins-0.0.1-SNAPSHOT.jar`
3. 원격 서버로 배포된 파일확인
위처럼 설정이 모두 끝났다면 빌드 실행을 해보도록하자. 빌드가된 후에 원격 서버로 .jar 파일이 배포된것을 확인할 수 있을것이다.
원격서버로 접속해서 jar파일이 배포되고 정상적으로 실행되었는지 확인해보도록하자.
정상적으로 배포된 후에 실행된 것을 확인할 수 있다.
만약, 젠킨스에서 SSH설정이나 스크립트 등을 입력할때 변수로 설정해서 사용하고 싶다면, 아래의 글을 참고하도록 하자.
추가적으로 위의 설정에 더하여, 만약 SpringBoot 서버를 도커컨테이너로 원격서버에 배포하고 싶다면 아래의 글의 과정을 이어서 진행하도록 하자.
참고
'Infra > Jenkins' 카테고리의 다른 글
[Jenkins] Jenkins로 Nginx 및 Spring Boot 컨테이너를 원격서버에 띄워서 Reverse Proxy 구성하기 (0) | 2021.02.07 |
---|---|
[Jenkins] Jenkins를 이용하여 원격 서버에 SpringBoot 컨테이너 띄우기 (0) | 2021.01.24 |
[Jenkins] Jenkins & Github 연동 및 자동배포 구성하기 2 (0) | 2020.12.30 |
[Jenkins] Jenkins & Github 연동 및 자동배포 구성하기 1 (0) | 2020.12.29 |
[Jenkins] Linux(Centos & RHEL)에 Jenkins 설치하기 (1) | 2020.12.22 |
댓글