[AWS] EC2를 이용한 서버 구축 5 (Git과 배포 스크립트를 통한 프로젝트 배포)

저번 시간에는 파일질라를 통해 프로젝트 파일을 수동으로 빌드하여 배포를 해보았습니다.

 

이번에는 깃허브 ssh url을 통해 더욱 쉽게 배포를 해보겠습니다!

 

AWS에 접속

먼저 AWS에 접속하여 줍니다.

$ ssh -i [pem 키페어 주소] ubuntu@[탄력적 ip 주소]

 

SSH Key 생성

.ssh 디렉토리로 이동합니다

$ cd ~/.ssh

 

이제 키페어를 ssh key를 생성해봅시다!

$ ssh-keygen -t rsa -C [깃허브 계정 이메일]

 

SSH Key Git 연동

생성된 ssh key를 깃허브에 추가해줍니다.

 

$ cat id_rsa.pub

 

먼저  cat id_rsa.pub를 치게되면

 

이렇게 ssh-rsa ~~~~~ 깃허브 메일 주소가 나오는데 이걸 복사 해줍니다

 

※ 참고로 git bash에서 복사는 Ctrl + Insert, 붙여넣기는 Shift + Insert 입니다.

 

https://github.com/settings

 

GitHub: Let’s build from here

GitHub is where over 100 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and fea...

github.com

 

Github 로그인 -> Settings -> SSH and GPG keys를 클릭합니다.

 

New SSH key를 클릭한 후에 아까 생성하고 복사해 뒀던 SSH Key를 넣어주시면 됩니다! 

 

Git Clone

자 이제 SSH Key도 다 입력을 완료했으니 깃허브를 통해 프로젝트를 EC2에 clone 해봅시다~

 

 

복사하고 싶은 프로젝트에 SSH탭에서 나온 주소를 복사합니다!

 

그후 git bash로 돌아와서 clone하고싶은 디렉토리로 이동 후에

 $ git clone [복사한 SSH 주소]

 

이렇게 추가가 된 것을 알 수 있습니다.

 

  • 먼저 프로젝트에 맞는 자바 버전이 적용 되었는지 확인을 합니다!
  • clone된 프로젝트에 들어갑니다! 
$ cd [프로젝트명]
  • build를 합니다
$ ./gradlew build

여기서 permission denied라고 뜨면 당황하지 마세요!!!!

gradlew를 실행할 수 있는 권한이 없기 때문입니다.

$ chmod +x gradlew

 

다시 ./gradlew build를 하면 성공!

 

 

빌드가 완료되면 build/libs 디렉토리가 생성되고

프로젝트명-0.0.1-SNAPSHOT.jar 파일이 생성 되는 것을 알 수 있습니다.

java -jar [파일명].jar

 

배포 스크립트 만들기

 

배포 스크립트를 왜 만들까요???

 

만약 프로젝트에 변경사항을 서버에 적용하고 싶을 때 배포 스크립트를 쓰지 않으면

아래 명령어들을 일일히 번거롭게 쳐야 합니다!

 

git pull -> build 시작 -> build 디렉토리 이동 -> build 파일 복사 -> 실행 중인 pid 확인 -> 있으면 종료

-> 변경한 프로젝트 배포...

 

하지만 이 명령어들을 스크립트로 만들어서 ./depoly.sh를 실행하게되면 간단하게 변경사항을 적용할 수 있습니다!!!!

 

자 먼저 변경사항이 있는 프로젝트에 들어갑니다!

※ 깃에 변경사항이 push가 되어있어야 합니다.

 

$ nano ./deploy.sh

deploy.sh라는 쉘 스크립트를 만듭니다.

 

아래 REPOSITORY와 PROJECT_NAME에 본인의 파일 경로와, 프로젝트 이름을 입력해줍니다!

#!/bin/bash

REPOSITORY=/home/ubuntu
PROJECT_NAME=thymeleaf-basic

cd $REPOSITORY/$PROJECT_NAME

echo "> Git Pull"
git pull

echo "> 프로젝트 Build 시작"
./gradlew clean build

echo "> step1 디렉토리 이동"
cd $REPOSITORY

echo "> Build 파일 복사"
cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/

echo "> 현재 구동적인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)

if [ -z "$CURRENT_PID" ]; then
    echo "> 현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다."
else
    echo "> kill -15 $CURRENT_PID"
    kill -15 $CURRENT_PID
    sleep 5
fi

echo "> 새 애플리케이션 배포"
JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)

echo "> JAR Name: $JAR_NAME"

nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &

 

작성 완료하고 나오면 deploy.sh 파일이 생기는 것을 알 수 있습니다.

 

$ ./deploy.sh

 

자 이제 스크립트르 실행하면 ~~~ 에러가 뜹니다!!! :(

당황하지 말고 아까 gradlew 실행권한을 부여한 것처럼 실행 권한을 추가해줍니다!

$ chmod +x ./deploy.sh

 

 

그 다음 다시 실행 해보면...

 

기존에 실행되던 서버를 죽이고, 깃으로부터 PULL해온 변경사항을 추가한 JAR파일을 새로 배포됩니다.

 

아래 사진을 보시면 수정된 코드가 배포 된 것을 알 수 있습니다

 

참고

https://velog.io/@leeeeeyeon/EC2-%EC%84%9C%EB%B2%84%EC%97%90-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A5%BC-%EB%B0%B0%ED%8F%AC%ED%95%B4-%EB%B3%B4%EC%9E%90

 

다음 포스팅에서는 디비연결을 해볼게요 그럼 이만!!!