
설날 내내 aws를 붙잡고 싸운 내용을 정리해보겠다😭
배포 자동화를 구축하는 방법에는 Jenkins, GitHub Actions 등 다양한 도구가 있지만 GitHub Actions는 GitHub에 내장되어 있으며 유지보수가 필요없고 간단한 배포 자동화를 경험해보기에 좋을 것 같아 선택하였다.
./gradlew build
./gradlew build -x test # 테스트 제외 빌드
실행 명령어
java -jar -Dspring.profiles.active=prod app.jar
SSH 접속
ssh -i ~/.ssh/key.pem ec2-user@<EC2 퍼블릭 IP>
SCP로 파일 전송
scp -i ~/.ssh/key.pem app.jar ec2-user@<IP>:~/deploy/
Amazon Corretto 21를 설치했다.
curl -LO https://corretto.aws/downloads/latest/amazon-corretto-21-x64-linux-jdk.rpm
sudo yum localinstall -y amazon-corretto-21-x64-linux-jdk.rpm
애플리케이션 실행
nohup java -jar -Dspring.profiles.active=prod app.jar &
tail -f nohup.out
ps aux | grep java: 실행 확인kill -9 <pid>: 종료--spring.profiles.active로 환경 분리 (local, prod)방법 1: git secret 사용
방법 2: yml 파일을 별도 private repo에 분리
name: CI/CD Pipeline
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v3
with:
distribution: 'corretto'
java-version: '21'
- name: Build with Gradle
run: ./gradlew clean build
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up SSH key
uses: webfactory/ssh-agent@v0.5.4
with:
ssh-private-key: ${{ secrets.EC2_SSH_KEY }}
- name: Add known hosts
run: ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts
- name: Deploy
run: |
rsync -avz ./build/libs/app.jar ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }}:${{ secrets.EC2_DEPLOY_PATH }}
ssh ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << EOF
pkill -f app.jar || true
sleep 5
nohup java -jar app.jar > nohup.out 2>&1 &
EOF