본문 바로가기
Infra/Jenkins

[Jenkins] Jenkins & Github 연동 및 자동배포 구성하기 3

by dbjh 2020. 12. 31.
반응형

이번 글에서는 jenkins에서 스프링부트 프로젝트를 github에서 가져와 빌드한 후 특정 서버로 .jar파일 형태로 전송하여 해당 .jar파일을 실행시키는 과정에 대해 알아보도록하자.  (이 글에서 실습한 내용은 GCP 인스턴스 위의 젠킨스에서 -> AWS EC2 인스턴스로 파일 배포)

출처 : 구글검색

 

1. jenkins ssh 플러그인 설치 

젠킨스에서 스프링부트 서버를 .jar파일로 생성하고 특정 서버로 전송하기 위해서는 ssh를 이용해야하는데, 젠킨스에서는 이를 플러그인으로 제공해준다. 아래와 같이 Publish Over 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파일 실행 명령어는 테스트용으로 입력해둔것이고 추가할 필요없으니, 무시하도록하자 

  Send build artifacts over SSH 설정

위의 항목들에 대해 간단히 설명은 아래와 같다.

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파일이 배포되고 정상적으로 실행되었는지 확인해보도록하자.

배포된 jar파일 확인
실행중인 jar파일 확인

정상적으로 배포된 후에 실행된 것을 확인할 수 있다.

만약, 젠킨스에서 SSH설정이나 스크립트 등을 입력할때 변수로 설정해서 사용하고 싶다면, 아래의 글을 참고하도록 하자.

 

Jenkins 사용법 - 노드별 환경 변수 셋팅및 사용

Jenkins 프로젝트를 사용하다보면 특정 파일의 경로나, 특수한 키값을 공통으로 사용해야 하는 경우가 있...

blog.naver.com

추가적으로 위의 설정에 더하여, 만약 SpringBoot 서버를 도커컨테이너로 원격서버에 배포하고 싶다면 아래의 글의 과정을 이어서 진행하도록 하자.

 

[Jenkins] Jenkins를 이용하여 원격 서버에 SpringBoot 컨테이너 띄우기

이번글에서는 GCP(Google Cloud Platform) VM 인스턴스 위에서 실행 중인 젠킨스에서 AWS EC2 인스턴스로 SpringBoot 프로젝트를 빌드한 jar 및 Dockerfile 을 전송하여 도커이미지로 변환 후 컨테이너로 띄우는..

dbjh.tistory.com

 

참고

 

[Jenkins] [ec2] Jenkins 원격 서버 배포(Publish Over SSH)

[Jenkins] [ec2] Jenkins 원격 서버 배포(Publish Over SSH) 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ Jenkins와 ec2 연결하여 배포 하기 - Jenkins - Publish Over SSH ] 입니다. : ) Jenkins와 배포서버..

goddaehee.tistory.com

 

반응형

댓글