
Spring Boot 자동 배포는 코드 변경 시 빌드부터 서버 반영까지의 과정을 자동화하는 것이다.
주요 목표는 다음과 같다.
일반적인 구성은 다음과 같다.
sudo apt update
sudo apt install -y openjdk-17-jdk git unzip
/home/ubuntu/app
Jar 파일 또는 Docker 컨테이너는 이 경로에서 관리
./gradlew clean build
빌드 결과물 위치
build/libs/app.jar
테스트를 생략하고 싶다면
./gradlew build -x test
경로
.github/workflows/deploy.yml
name: Spring Boot CI/CD
on:
push:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Build
run: ./gradlew clean build -x test
Repository Settings > Secrets > Actions
- name: Deploy to EC2
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_KEY }}
source: "build/libs/*.jar"
target: "/home/ubuntu/app"
#!/bin/bash
pkill -f app.jar
nohup java -jar /home/ubuntu/app/app.jar > app.log 2>&1 &
- name: Restart App
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_KEY }}
script: |
bash /home/ubuntu/app/run.sh
/etc/systemd/system/spring-app.service
[Unit]
Description=Spring Boot Application
After=network.target
[Service]
User=ubuntu
ExecStart=/usr/bin/java -jar /home/ubuntu/app/app.jar
SuccessExitStatus=143
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start spring-app
sudo systemctl enable spring-app
Spring Boot 자동 배포의 핵심은 다음 세 가지다.
이 구조를 익히면 개인 프로젝트부터 실서비스까지 동일한 방식으로 확장 가능하다.