[💻 Code] -> [⚙️ Build] -> [🧪 Test] -> [🚀 Deploy]
협업 프로젝트를 진행하다 보면 요구사항은 계속 바뀌고, 바뀔 때마다 코드를 수동으로 빌드하고 테스트 서버에 배포하는 작업은 끝이 없습니다[4]. 이런 단순 반복 작업에 시간을 쏟다 보면 정작 중요한 비즈니스 로직 개발에 집중하기 어렵죠. 어떻게 하면 이 과정을 자동화하고 개발자는 코드에만 집중할 수 있을까요?
⚡ TL;DR:
- 이 글에서는 Jenkins를 활용해 빌드, 테스트, 배포 과정을 자동화하는 CI/CD 파이프라인의 핵심 개념을 알아봅니다[11].
- 왜 Jenkins가 CI/CD의 표준처럼 여겨지는지 이해하고, 직접 파이프라인을 구축할 자신감을 얻게 될 것입니다[2][12].
목차
- 배경: CI/CD, 왜 필요할까?
- 핵심 개념: Jenkins란 무엇인가?
- 실습: Jenkins로 파이프라인 만들기
- 모범 사례: Freestyle vs Pipeline
- 마치며 & 참고자료
1. 배경: CI/CD, 왜 필요할까?
과거의 폭포수 모델과 달리 오늘날의 애자일 개발 환경에서는 잦은 요구사항 변경과 빠른 기능 추가가 빈번하게 발생합니다[4]. 이때마다 수동으로 통합하고 배포한다면 엄청난 시간과 비용이 소요되고, 통합 과정에서 수많은 버그가 발생할 수 있습니다[4]. CI/CD는 이러한 문제를 해결하기 위해 등장한 개발 문화이자 방법론입니다[6].
- ✅ CI (Continuous Integration, 지속적 통합): 여러 개발자가 작업한 코드를 주기적으로 중앙 저장소(예: Git)에 병합하고, 자동으로 빌드 및 테스트하여 통합 오류를 조기에 발견하는 프로세스입니다[5][7][8]. 이를 통해 개발자들은 항상 최신 버전의 코드베이스에서 작업할 수 있습니다[7].
- ✅ CD (Continuous Delivery/Deployment, 지속적 제공/배포): CI 단계를 통과한 코드를 실제 운영 환경에 배포할 준비가 된 상태로 만들거나(지속적 제공), 한 걸음 더 나아가 배포까지 자동으로 수행하는(지속적 배포) 프로세스입니다[5][7][8].
- ✅ CI/CD: 이 두 과정을 합쳐, 개발자가 코드를 작성하는 순간부터 사용자에게 서비스가 전달되기까지의 모든 단계를 자동화하여 개발자와 사용자 사이의 격차를 줄이는 것을 의미합니다[1].
2. 핵심 개념: Jenkins란 무엇인가?
Jenkins는 Java로 만들어진 오픈소스 자동화 서버로, CI/CD 파이프라인 구축을 통해 소프트웨어 개발의 빌드, 테스트, 배포 과정을 자동화하는 핵심 도구입니다[5][8][11].
Jenkins는 전 세계적으로 가장 널리 사용되는 CI/CD 플랫폼 중 하나로, 오랜 역사와 안정성을 자랑합니다[10]. Jenkins가 개발자들에게 사랑받는 이유는 명확합니다.
- 강력한 플러그인 생태계: Jenkins의 가장 큰 강점은 약 2,000개에 달하는 플러그인입니다[2]. Git, Docker, Maven, Gradle 등 거의 모든 개발 도구 및 환경과 쉽게 연동하여 기능을 무한히 확장할 수 있습니다[2][5].
- 오픈소스 및 무료: 누구나 무료로 다운로드하여 사용할 수 있으며, 필요에 따라 엔터프라이즈 버전도 선택 가능합니다[8].
- 높은 유연성과 확장성: 간단한 CI 서버부터 여러 장비에 작업을 분산하는 복잡한 CD 허브까지, 프로젝트 규모와 요구사항에 맞춰 유연하게 구성할 수 있습니다[5][7].
- 활발한 커뮤니티: 거대한 사용자 커뮤니티를 통해 문제 해결에 필요한 정보나 노하우를 쉽게 얻을 수 있습니다[2][8].
3. 실습: Jenkins로 파이프라인 만들기
Jenkins로 간단한 CI/CD 파이프라인을 구축하는 과정을 단계별로 알아봅시다.
① 사전 준비
Jenkins를 사용하려면 시스템에 Java가 설치되어 있어야 합니다[6]. 또한 CI/CD를 적용할 프로젝트의 코드가 담긴 GitHub 저장소가 필요합니다[5].
② Jenkins 설치 및 실행
- Jenkins 공식 홈페이지에서 'Generic Java package (.war)' 파일을 다운로드합니다[6].
- 터미널을 열고 다운로드한 경로로 이동한 뒤,
java -jar jenkins.war
명령어를 입력하여 Jenkins를 실행합니다[6]. - 웹 브라우저에서
http://localhost:8080
으로 접속하여 초기 설정을 진행합니다.
③ 파이프라인 프로젝트 생성
- Jenkins 대시보드에서 '새로운 Item'을 클릭합니다[3][6].
- 프로젝트 이름(예: 'my-first-pipeline')을 입력하고 'Pipeline'을 선택한 후 'OK'를 누릅니다[6].
④ Jenkinsfile 작성 및 실행
파이프라인의 각 단계를 코드로 정의하는 Jenkinsfile
을 작성합니다. 이 파일은 프로젝트의 루트 디렉토리에 위치시키는 것이 일반적입니다[3][5].
// Jenkinsfile 예시
pipeline {
agent any // 모든 Jenkins 에이전트에서 실행 가능
stages {
stage('Source Code') { // 1단계: 소스 코드 가져오기
steps {
echo 'Checking out source code from Git...'
// 실제로는 git step을 사용합니다.
// git 'https://github.com/your-username/your-repo.git'
}
}
stage('Build') { // 2단계: 애플리케이션 빌드
steps {
echo 'Building the application...'
// Java 프로젝트의 경우: sh './gradlew build'
}
}
stage('Test') { // 3단계: 자동화된 테스트 실행
steps {
echo 'Running tests...'
// 예: sh './gradlew test'
}
}
stage('Deploy') { // 4단계: 서버에 배포
steps {
echo 'Deploying to staging server...'
// 예: sh './deploy.sh'
}
}
}
}
- 파이프라인 설정 페이지에서 'Pipeline script from SCM' 옵션을 선택하고, GitHub 저장소 URL과
Jenkinsfile
경로를 입력합니다[6]. - '저장' 후 'Build Now'를 클릭하면 파이프라인이 실행됩니다[6].
- Jenkins 대시보드에서 각 단계(Stage)의 성공 여부, 소요 시간 등을 시각적으로 확인할 수 있습니다[3].
4. 모범 사례: Freestyle vs Pipeline
Jenkins에서는 주로 두 가지 방식의 프로젝트를 생성할 수 있습니다: Freestyle과 Pipeline. 둘의 차이를 이해하면 프로젝트에 맞는 방식을 선택하는 데 도움이 됩니다[3].
구분 | Freestyle Project | Pipeline |
---|---|---|
설정 방식 | 웹 GUI를 통해 클릭으로 모든 설정을 진행 | Jenkinsfile 이라는 스크립트 파일로 파이프라인을 코드로 정의[3] |
장점 | 직관적이고 사용법이 간단하여 입문자에게 적합 | 파이프라인을 코드로 관리(IaC)하여 버전 관리, 재사용, 복잡한 제어가 용이[3] |
단점 | 설정 내용의 버전 관리가 어렵고, 복잡한 파이프라인 구성에 한계 | 스크립트(Groovy) 문법 학습이 필요함[3] |
추천 | 간단한 자동화 작업이나 CI/CD 개념 학습용 | 재사용성과 확장성이 중요한 실제 프로젝트, DevOps 문화 도입 |
5. 마치며
Jenkins는 반복적인 빌드, 테스트, 배포 작업을 자동화하여 개발 생산성을 크게 향상시키는 강력한 도구입니다[12]. 특히 코드로서의 파이프라인(Jenkinsfile
)과 방대한 플러그인 생태계는 어떤 개발 환경에도 유연하게 녹아들 수 있는 최고의 장점입니다[2][3]. 오늘 CI/CD와 Jenkins의 기본 개념을 익혔으니, 이제 여러분의 작은 개인 프로젝트부터 자동화를 적용해보며 그 편리함을 직접 느껴보시길 바랍니다.
실제 프로젝트에 적용할 때는 보안을 위해 Jenkins 사용자 인증, 자격 증명 관리 플러그인 활용, 그리고 빌드 전용 서버(Agent)를 분리하여 운영하는 것을 권장합니다.
❤️ 이 글이 도움이 되셨다면 하트와 댓글 부탁드립니다! 궁금한 점은 언제든지 질문해주세요.
참고자료
- Jenkins 공식 문서: https://www.jenkins.io[10]
- Jenkins 공식 튜토리얼: https://www.jenkins.io/doc/tutorials/[16]
- [DevOps] Jenkins를 통한 CI/CD 구축기: https://seongwon.dev/DevOps/20220717-CICD%EA%B5%AC%EC%B6%95%EA%B8%B02/[3]
[1] https://velog.io/@bbkyoo/Jenkins
[2] https://www.elancer.co.kr/blog/detail/741
[3] https://seongwon.dev/DevOps/20220717-CICD%EA%B5%AC%EC%B6%95%EA%B8%B02/
[4] https://oneny.tistory.com/105
[5] https://www.tatvasoft.com/blog/ci-cd-jenkins/
[6] https://www.simplilearn.com/tutorials/jenkins-tutorial/ci-cd-pipeline
[7] https://www.cloudbees.com/jenkins/what-is-jenkins
[8] https://dev.to/d_sourav155/jenkins-101-a-comprehensive-guide-to-continuous-integration-and-deployment-part-1-3e17
[9] https://paran-coding.tistory.com/66
[10] https://www.jenkins.io
[11] https://sehun5515.tistory.com/159
[12] https://back-stead.tistory.com/81
[13] https://velog.io/@hanif/Gitlab%EA%B3%BC-Jenkins%EB%A1%9C-CICD-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0
[14] https://docs.netapp.com/ko-kr/netapp-solutions/containers/rh-os-n_use_case_pipeline.html
[15] https://ko.wikipedia.org/wiki/%EC%A0%A0%ED%82%A8%EC%8A%A4_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)
[16] https://www.jenkins.io/doc/tutorials/
[17] https://www.youtube.com/watch?v=5xg9LCOVTFQ
[18] https://dev.to/prodevopsguytech/getting-started-with-cicd-a-beginners-guide-to-automating-your-first-pipeline-483b
'100===Dev Ops > Jenkins' 카테고리의 다른 글
젠킨스(Jenkins) - 지속적 통합 & 배포의 강력한 도구 🛠️ (0) | 2024.05.28 |
---|