Jenkins로 Spring Boot 서버 자동 배포하기 – 3. 빌드한 서버 배포하기

젠킨스를 만들고, 자동 빌드까지 했다. 이제 배포할 차례.

두 번째 AWS 서버를 켜고, 빌드한 jar 파일이 돌아갈 수 있도록 기초적인 준비를 해둔다.

$ sudo apt update
$ sudo apt install default-jre
$ sudo apt install default-jdk

이제 젠킨스로 돌아와 Jenkins 관리 -> 시스템 설정에서 Publish over SSH 란에 정보를 입력한다.

먼저 Name은 식별가능하게 임의로 짓는다. Hostname은 두 번째 서버에 접근 가능한 IP 주소나 도메인이어야 한다. Username, Remote Directory는 사정에 맞게 적어넣는다. (AWS 우분투 인스턴스의 기본 사용자 이름은 ubuntu이다.)

그 다음 Key에는 AWS측에서 제공한 SSH 로그인 인증서를 텍스트 편집기로 열어 내용을 통째로 복사 붙여넣기 하면 된다.

그런 다음 다시 만든 프로젝트로 돌아가 구성 -> 빌드 환경에서 Send files or execute commands over SSH after the build runs 체크후 내용을 입력한다.

Name에서 아까 만든 SSH 프로필을 찾아 선택하고, Transfers에 내용을 알맞게 채워 넣는다.
위 이미지에서는 build/libs에서 아무 이름의 jar 파일이나 찾아 선택했고, 원격 디렉토리의 루트에 이를 전송하며, 이후 원격에 있는 newBuild.sh 스크립트 파일을 실행한다.

여기까지 하고 다시 빌드를 돌리면 두 번째 서버로 jar 파일이 전송됨을 확인할 수 있다. 위의 설정값은 어디까지나 예시이며 jar 파일이 전송되지 않거나 엉뚱한 곳으로 들어간다면 설정을 이리저리 바꿔보자.

이제 두 번째 서버의 홈 디렉토리에 전송받은 jar 파일로 서버를 띄우는 newBuild.sh를 만들 차례다.

#!/bin/bash

PID=`ps -e | grep java | awk '{print $1}'`

if [ $PID ]
    then
        kill -9 $PID    // 이미 서버가 실행중이라면 종료시킨다.
fi
TRANSFERRED_FILE=`find ~/build/libs/ ! -name saebyeok-application.jar | grep jar // 받아온 파일을 검색
`
mv $TRANSFERRED_FILE ~/build/libs/saebyeok-application.jar // 서비스용 파일에 덮어씌움

java -jar -Dserver.port=8080 ~/build/libs/saebyeok-application.jar > log.txt &
// 서버를 실행시키고 로그는 log.txt에 모은다.

이걸 기본으로 원하는 기능을 더 추가해서 만들면 될 것이다.
여기까지 하면 커밋이 푸시될 때마다 빌드하고, 배포하고, 띄우는 일이 다 자동으로 실행되게 되었다.
이제부터는 그냥 열심히 코딩하고 푸시만 하면 된다!

댓글 남기기