728x90
CI/CD란?
단계 |
설명 |
CI (Continuous Integration) | 코드 푸시마다 자동 빌드/테스트 |
CD (Continuous Deployment) | 테스트 통과 시 자동 배포까지 실행 |
1. GitHub Actions로 CI/CD 구현
.github/workflows/deploy.yml
name: Spring Boot CI/CD
on:
push:
branches: [ "main" ]
jobs:
build-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: '17'
- name: Grant execute permission for Gradle
run: chmod +x ./gradlew
- name: Build with Gradle
run: ./gradlew clean build
- name: Deploy to EC2
uses: appleboy/scp-action@master
with:
host: ${{ secrets.EC2_HOST }}
username: ec2-user
key: ${{ secrets.EC2_KEY }}
source: "build/libs/*.jar"
target: "/home/ec2-user"
- name: Run on EC2
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_HOST }}
username: ec2-user
key: ${{ secrets.EC2_KEY }}
script: |
pkill -f 'java -jar' || true
nohup java -jar /home/ec2-user/myapp-0.0.1-SNAPSHOT.jar > app.log 2>&1 &
GitHub Secrets 설정
이름 | 설명 |
EC2_HOST | EC2 퍼블릭 IP |
EC2_KEY | .pem 내용 전체 복사 |
EC2_USERNAME | 일반적으로 ec2-user |
2. Jenkins로 CI/CD 구현
구성 요소
- Jenkins 설치 (EC2 또는 로컬)
- Git, Java, Gradle 설치
- Jenkins Pipeline 플러그인 설치
Jenkinsfile (프로젝트 루트에 생성)
pipeline {
agent any
stages {
stage('Clone') {
steps {
git 'https://github.com/your-repo/spring-boot-project.git'
}
}
stage('Build') {
steps {
sh './gradlew clean build'
}
}
stage('Deploy') {
steps {
sh '''
scp -i ~/.ssh/your-key.pem build/libs/*.jar ec2-user@your-ec2:/home/ec2-user/
ssh -i ~/.ssh/your-key.pem ec2-user@your-ec2 << EOF
pkill -f 'java -jar' || true
nohup java -jar /home/ec2-user/myapp-0.0.1-SNAPSHOT.jar > app.log 2>&1 &
EOF
'''
}
}
}
}
Jenkins는 빌드 상태 UI 제공, 다양한 플러그인 지원 등의 장점이 있습니다.
GitHub Actions vs Jenkins 비교
항목 | GitHub Actions | Jenkins |
설치 여부 | 없음 (GitHub 내장) | 서버 직접 설치 |
설정 방식 | YML 파일 | UI + Jenkinsfile |
적합 대상 | 소형 프로젝트, GitHub 기반 | 기업용, 다양한 VCS 연동 |
확장성 | Actions 마켓 활용 | 플러그인 무한 확장 |
UI/모니터링 | 간단한 로그 | 강력한 빌드 대시보드 |
마무리 요약
단계 | 설명 |
CI | 빌드 + 테스트 자동화 |
CD | EC2 배포 자동화 |
GitHub Actions | 빠른 구성, 깃허브에 최적화 |
Jenkins | 확장성↑, 복잡한 워크플로우 가능 |
공통 요소 | SSH, JAR 복사, nohup java -jar 실행 |
LIST
'SpringBoot > 배포 및 운영' 카테고리의 다른 글
로그 관리(Logback, Log4j2) (0) | 2025.04.16 |
---|---|
AWS EC2에 배포하기 (0) | 2025.04.16 |
Spring Boot 패키징(JAR, WAR) (1) | 2025.04.15 |