기능을 추가하거나 수정할 때마다
로컬 브랜치에서 작업 -> push -> 깃헙에서 pull request 생성 -> merge -> 인스턴스에서 pull -> 빌드 -> 실행
위 과정을 매번 반복하는 것은 정말 번거롭다.
pull request를 merge하면
ec2 인스턴스에서 기존 실행하던 스프링부트 애플리케이션을 종료하고
pull -> build -> 실행하는 workflow를 만들어보자.


SSH_PRIVATE_KEY에 .pub 파일의 내용을, HOST에 EC2의 퍼블릭 IP 또는 도메인 주소를, USER에 EC2에 접속할 때 사용하는 SSH 사용자명을 넣어준다.
name: Deploy to EC2
on:
pull_request:
types: [closed]
branches: [main]
jobs:
deploy:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Deploy to EC2
env:
PRIVATE_KEY: ${{ secrets.EC2_SSH_PRIVATE_KEY }}
HOST: ${{ secrets.EC2_HOST }}
USER: ${{ secrets.EC2_USER }}
run: |
echo "$PRIVATE_KEY" > private_key && chmod 600 private_key
ssh -o StrictHostKeyChecking=no -i private_key ${USER}@${HOST} '
cd dive &&
PID=$(pgrep -f xidong-0.0.1-SNAPSHOT.jar) &&
if [ ! -z "$PID" ]; then sudo kill -9 $PID; fi &&
git pull &&
./gradlew build &&
sudo nohup java -jar xidong-0.0.1-SNAPSHOT.jar &'
