개발 규모가 커질수록 “코드를 수정할 때마다 수동으로 빌드하고 배포”하는 방식은 비효율적입니다. 이를 자동화하기 위한 대표적인 도구가 Jenkins이며, Spring Boot와 결합하면 빌드·테스트·배포가 자동으로 이어지는 CI/CD 파이프라인을 쉽게 구성할 수 있습니다.
CI/CD란 무엇인가?
- CI (Continuous Integration): 개발자가 코드를 푸시할 때마다 자동으로 빌드와 테스트를 수행하여 문제를 조기에 발견
- CD (Continuous Deployment): 빌드가 성공하면 자동으로 스테이징 또는 프로덕션 서버에 배포
즉, Jenkins를 이용하면 “코드 → 테스트 → 빌드 → 배포”의 전체 과정을 자동화할 수 있습니다.
1. Jenkins 환경 준비
1-1. Docker로 Jenkins 설치
Jenkins를 가장 간단히 설치하는 방법은 Docker를 이용하는 것입니다.
docker run -d \
-p 8080:8080 -p 50000:50000 \
--name jenkins \
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts
설치 후 브라우저에서 http://localhost:8080으로 접속하면 Jenkins 초기 설정 화면이 나타납니다. 처음 로그인 시 표시되는 /var/jenkins_home/secrets/initialAdminPassword 파일의 비밀번호를 입력하면 됩니다.
1-2. 필수 플러그인 설치
Jenkins 초기 설정 시 다음 플러그인을 설치합니다.
- Git Plugin
- Pipeline Plugin
- Docker Pipeline
- Blue Ocean (파이프라인 시각화)
- Credentials Binding Plugin
2. Spring Boot 프로젝트 준비
Spring Boot 프로젝트의 루트 디렉터리에 Jenkinsfile을 추가합니다. 이 파일은 파이프라인의 전체 자동화 과정을 정의합니다.
pipeline {
agent any
environment {
DOCKER_IMAGE = 'your-dockerhub-id/springboot-ci-demo'
REGISTRY_CREDENTIALS = 'dockerhub-cred'
}
stages {
stage('Checkout') {
steps {
git branch: 'main', url: 'https://github.com/yourname/springboot-ci-demo.git'
}
}
stage('Build') {
steps {
sh './gradlew clean build'
}
}
stage('Docker Build & Push') {
steps {
script {
docker.withRegistry('https://index.docker.io/v1/', REGISTRY_CREDENTIALS) {
def app = docker.build("${DOCKER_IMAGE}:${env.BUILD_NUMBER}")
app.push()
app.push('latest')
}
}
}
}
stage('Deploy') {
steps {
sh 'docker stop springboot-demo || true && docker rm springboot-demo || true'
sh 'docker run -d -p 8080:8080 --name springboot-demo your-dockerhub-id/springboot-ci-demo:latest'
}
}
}
post {
success {
echo '✅ 배포 성공!'
}
failure {
echo '❌ 빌드 또는 배포 실패'
}
}
}
이 Jenkinsfile은 다음 순서로 동작합니다:
- Git에서 최신 코드 가져오기
- Gradle 빌드 수행
- Docker 이미지 빌드 및 Docker Hub 푸시
- 기존 컨테이너 중지 후 최신 버전 실행
3. Jenkins Credentials 설정
Jenkins 대시보드 → Manage Jenkins → Credentials → System → Global credentials에서 Docker Hub 계정을 등록합니다.
- ID: dockerhub-cred
- Username/Password: Docker Hub 계정 정보
이 ID는 Jenkinsfile의 REGISTRY_CREDENTIALS 환경 변수와 연결됩니다.
4. Jenkins 파이프라인 구성
4-1. 새로운 파이프라인 생성
Jenkins 홈 → 새로운 Item → Pipeline을 선택합니다.
- 이름: SpringBoot-CI-Pipeline
- 빌드 트리거: “GitHub hook trigger for GITScm polling” (푸시 시 자동 실행)
- Pipeline Script: “Pipeline script from SCM” 선택 후 Git URL 입력
4-2. 자동 빌드 트리거
GitHub 저장소 설정에서 Jenkins 서버 URL을 웹훅으로 등록합니다.
http://your-jenkins-server:8080/github-webhook/
이제 코드를 푸시할 때마다 Jenkins가 자동으로 빌드와 배포를 수행합니다.
5. Blue Ocean으로 시각적 파이프라인 확인
Blue Ocean 플러그인을 사용하면 파이프라인의 각 단계를 시각적으로 확인할 수 있습니다.
http://localhost:8080/blue
각 단계의 상태(성공/실패)를 직관적으로 볼 수 있으며, 실패 시 해당 단계의 로그를 바로 분석할 수 있습니다.
6. 실무 적용 시 구성 팁
- 멀티 브랜치 파이프라인: 브랜치별로 독립된 빌드 파이프라인 구성
- 스테이징 환경 분리: main 푸시 시 프로덕션, develop 푸시 시 스테이징 배포
- 테스트 단계 추가: JUnit, Mockito 등 단위 테스트 단계 삽입
- Slack Notification: 빌드 성공/실패 알림을 Slack으로 전송
- 보안: Jenkinsfile 내 비밀번호 직접 기입 금지 → Credentials 사용
7. CI/CD 파이프라인 전체 흐름 요약
[Git Push] → [Jenkins Trigger] → [Build & Test] → [Docker Build & Push] → [Deploy to Server]
이 과정은 모든 단계가 자동으로 실행되며, 개발자는 코드 작성에만 집중할 수 있습니다. 문제가 발생하면 Jenkins가 자동으로 중단하고 로그를 제공하여 빠른 복구가 가능합니다.
주의할 점
- Jenkins 서버의 디스크 용량 관리 (빌드 아티팩트 자동 정리 설정)
- Docker 이미지 태그를 고유하게 관리 (빌드 번호 또는 Git SHA 사용)
- 운영 서버 접근 시 SSH Key 인증 사용 권장
- 보안을 위해 Jenkins에 HTTPS 설정 적용
- 배포 실패 시 자동 롤백 로직 추가 고려
Jenkins를 이용한 CI/CD 파이프라인 구축은 Spring Boot 애플리케이션의 개발 효율과 배포 안정성을 크게 향상시킵니다. 자동화된 빌드·테스트·배포 프로세스를 통해 휴먼 에러를 줄이고, 빠른 피드백 루프를 확보할 수 있습니다.
'개발 > JAVA' 카테고리의 다른 글
| Spring Boot와 AWS RDS 연동하기 - 안정적인 클라우드 데이터베이스 환경 구축 (0) | 2025.11.12 |
|---|---|
| Spring Boot + Kubernetes 배포하기 - 컨테이너 오케스트레이션으로 확장성 확보 (0) | 2025.11.10 |
| Spring Boot + Docker로 배포하기 - 손쉬운 컨테이너 기반 애플리케이션 배포 (0) | 2025.11.09 |
| Sleuth와 Zipkin으로 분산 트레이싱 - 마이크로서비스의 요청 흐름 가시화 (0) | 2025.11.08 |
| Hystrix/Resilience4j로 장애 대응하기 — 마이크로서비스의 회복탄력성 설계 (0) | 2025.11.07 |
