Github Actions로 스프링 자동 배포(2) - application.yml gitignore 처리의 프로필별 배포

크리링·2024년 11월 25일
0

실무 트러블 슈팅

목록 보기
6/10
post-thumbnail

참고 : Github Actions 로 배포 자동화하기

EC2 MySQL 설치 및 원격 접속

현재 서버는 운영 서버에 배포전 테스트와 프론트 확인이 주목적이므로 굳이 RDS를 사용하지않고 로컬의 MySQL을 사용하려고 한다.

일단 MySQL을 설치

sudo apt-get update
sudo apt-get install mysql-server
sudo systemctl enale mysql
sudo /usr/bin/mysql -u root -p

MySQL 접속 완료

비밀번호 변경

alter user 'root'@'localhost' identified with mysql_native_password by ‘비밀번호’;

FLUSH PRIVILEGES;
exit;

원격으로 DB에 접근하기 위해 외부 접속을 허용으로 변경

sudo su
cd /etc/mysql/mysql.conf.d
vi mysqld.cnf

bind-address 변경 (127.0.0.1 -> 0.0.0.0)

MySQL restart

service mysql restart
mysql -u root -p

Mysql 접속 성공!

이제 DB 툴에서 properties를 입력하면
(필자는 코드와 스키마를 동시에 볼 수 있어서 intellij에서 제공하는 DB툴을 사용한다.)

Test Connection 을 누르면

실패

찾아보니 root 계정으로는 local에서만 접근 가능

Mysql 재시작 후 확인

성공!
이제 gitignore 처리된 application.ymlgithub actions 자동배포에서 사용할 수 있도록 해보자




Github Actions 프로필별 배포 처리

  • 필자의 프로젝트는 서버 별로 다르므로 배포 시에 프로필 별로 다른 application.yml을 사용한다.(현재는 RELEASE)
  • application.ymlgitignore에 등록 되어있는 상태에서 자동배포를 해보려 한다.

일단 배포 스크립트를 작성해보자

  • appspec.yml
version: 0.0 # version은 반드시 0.0이어야 함
os: linux

files:
  - source: /
    destination: /home/ubuntu/server
    overwrite: yes

permissions:
  - object: /
    pattern: "**"
    owner: ubuntu
    group: ubuntu

hooks:
  AfterInstall:
    - location: scripts/stop.sh
      timeout: 60
      runas: ubuntu
  ApplicationStart:
    - location: scripts/start.sh
      timeout: 60
      runas: ubuntu
  • stop.sh
PROJECT_ROOT="/home/ubuntu/server"
JAR_FILE="$PROJECT_ROOT/jar/server.jar"

DEPLOY_LOG="$PROJECT_ROOT/deploy.log"

TIME_NOW=$(date +%c)

# 현재 구동 중인 애플리케이션 pid 확인
CURRENT_PID=$(pgrep -f $JAR_FILE)

# 프로세스가 켜져 있으면 종료
if [ -z $CURRENT_PID ]; then
  echo "$TIME_NOW > 현재 실행중인 애플리케이션이 없습니다" >> $DEPLOY_LOG
else
  echo "$TIME_NOW > 실행중인 $CURRENT_PID 애플리케이션 종료 " >> $DEPLOY_LOG
  kill -15 $CURRENT_PID
fi
  • start.sh
PROJECT_ROOT="/home/ubuntu/server"
JAR_FILE="$PROJECT_ROOT/jar/server.jar"

mkdir "$PROJECT_ROOT/jar"
mkdir "$PROJECT_ROOT/logs"

APP_LOG="$PROJECT_ROOT/logs/server.log"
ERROR_LOG="$PROJECT_ROOT/logs/error.log"
DEPLOY_LOG="$PROJECT_ROOT/logs/deploy.log"

TIME_NOW=$(date +%c)

# build 파일 복사
echo "$TIME_NOW > $JAR_FILE 파일 복사" >> $DEPLOY_LOG
cp $PROJECT_ROOT/build/libs/*-SNAPSHOT.jar $JAR_FILE

# jar 파일 실행
echo "$TIME_NOW > $JAR_FILE 파일 실행" >> $DEPLOY_LOG
source ~/.bashrc
nohup java -jar $JAR_FILE > $APP_LOG 2> $ERROR_LOG &

CURRENT_PID=$(pgrep -f $JAR_FILE)
echo "$TIME_NOW > 실행된 프로세스 아이디 $CURRENT_PID 입니다." >> $DEPLOY_LOG

Github Actions 설정에 RELEASE 서버 에서 실행될 application.yml 값 secret에 추가

commit 후 push

오류 발생
git actions 관련 토큰 문제

Settings -> Developer Settings -> personal Access Token -> 접속 범위를 변경할 AccessToken 클릭 -> workflow 부분 체크

수정 후 자동 배포 (필자의 resources 폴더명이 다른 문제)

수정 후 다시 배포

빌드 성공!

서버 실행 후 로그 확인 한 결과 오류 발생

확인해봤을때, 폴더 로 잘못 경로 설정
올바르게 수정

다시 실행시

성공!

스웨거 접속

Ec2 서버 403 error
확인해본결과 SecurityConfig에서 다른 프로필 실행시 필터 예외가 되고있어서 제거했다.

수정 후 스웨거 동작까지 성공!

이후에는 작성된 테스트 코드들을 자동화 테스트 과정을 배포 중에 넣어봐야겠다.

0개의 댓글