이제 Jar를 배포하여 실행해보자.
scripts
디렉토리를 생성 후 안에 deploy.sh
파일을 만들어 준다. 위치는 다음 그림과 같다.
deploy.sh
파일을 작성하자.
#!/usr/bin/env bash
REPOSITORY=/home/ubuntu/app
echo "> 현재 구동 중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -fl action | grep java | awk '{print $1}')
echo "현재 구동 중인 애플리케이션 pid: $CURRENT_PID"
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/*.jar | tail -n 1)
echo "> JAR NAME: $JAR_NAME"
echo "> $JAR_NAME 에 실행권한 추가"
chmod +x $JAR_NAME
echo "> $JAR_NAME 실행"
nohup java -jar $JAR_NAME > $REPOSITORY/nohup.out 2>&1 &
마지막 줄의 명령어를 보자. nohup 실행 시 CodeDeploy는 무한 대기한다. 이를 해결하기 위해 nohup.out
파일을 표준 입출력용으로 별도로 사용하는데, 사용하지 않으면 nohup.out
파일이 생기지 않고, CodeDeploy 로그에 표준 입출력이 출력된다. nohup이 끝나기 전까지 CodeDeploy도 끝나지 않으니 꼭 해야 한다.
script
의 파일도 S3에 보내주자. 다음 설정을 추가한다.
# script files 복사
- name: Copy script
run: cp ./scripts/*.sh ./deploy
permissions:
- object: /
pattern: "**"
owner: ubuntu
group: ubuntu
hooks:
ApplicationStart:
- location: deploy.sh
timeout: 60
runas: ubuntu
permissions
hooks
deploy.sh
를 ubuntu 권한으로 실행하게 한다.정상적으로 배포된 것을 확인할 수 있다.
그리고 웹 브라우저에서 EC2 도메인을 입력해서 확인해보자.
전 포스팅에서도 말했지만 다른 곳에서도 로그를 확인할 방법이 있었다. 여기서 확인하는 것이 보기 편하고 필요한 로그들을 볼 수 있는 것 같다.
Log 위치: /opt/codedeploy-agent/deployment-root
디렉토리의 내용을 확인하면 deployment-logs
라는 디렉토리를 확인할 수 있다. 이곳에서 CodeDeploy 로그를 확인할 수 있다. 물론 deploy.sh
에서 작성한 echo
도 확인할 수 있다.
그리고 영문과 숫자, 대시(-)가 있는 디렉토리명을 볼 수 있다. 그 디렉토리명은 CodeDeploy ID
이다. 그리고 디렉토리에 들어가서 내용을 확인하면 배포한 단위별로 배포 ID
로 된 디렉토리명들을 볼 수 있다. 이곳에서는 배포 파일이 정상적으로 왔는지 확인해 볼 수 있다.
스프링 부트와 AWS로 혼자 구현하는 웹 서비스(이동욱 님)