100===Dev Ops/Jenkins

🚀 Jenkins, CI/CD 자동화의 첫걸음: 왜 모두가 젠킨스를 쓸까?

블로글러 2024. 10. 31. 00:43
[💻 Code] -> [⚙️ Build] -> [🧪 Test] -> [🚀 Deploy]

 

협업 프로젝트를 진행하다 보면 요구사항은 계속 바뀌고, 바뀔 때마다 코드를 수동으로 빌드하고 테스트 서버에 배포하는 작업은 끝이 없습니다[4]. 이런 단순 반복 작업에 시간을 쏟다 보면 정작 중요한 비즈니스 로직 개발에 집중하기 어렵죠. 어떻게 하면 이 과정을 자동화하고 개발자는 코드에만 집중할 수 있을까요?

 

TL;DR:

  • 이 글에서는 Jenkins를 활용해 빌드, 테스트, 배포 과정을 자동화하는 CI/CD 파이프라인의 핵심 개념을 알아봅니다[11].
  • 왜 Jenkins가 CI/CD의 표준처럼 여겨지는지 이해하고, 직접 파이프라인을 구축할 자신감을 얻게 될 것입니다[2][12].

목차

  1. 배경: CI/CD, 왜 필요할까?
  2. 핵심 개념: Jenkins란 무엇인가?
  3. 실습: Jenkins로 파이프라인 만들기
  4. 모범 사례: Freestyle vs Pipeline
  5. 마치며 & 참고자료

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 설치 및 실행

  1. Jenkins 공식 홈페이지에서 'Generic Java package (.war)' 파일을 다운로드합니다[6].
  2. 터미널을 열고 다운로드한 경로로 이동한 뒤, java -jar jenkins.war 명령어를 입력하여 Jenkins를 실행합니다[6].
  3. 웹 브라우저에서 http://localhost:8080으로 접속하여 초기 설정을 진행합니다.

③ 파이프라인 프로젝트 생성

  1. Jenkins 대시보드에서 '새로운 Item'을 클릭합니다[3][6].
  2. 프로젝트 이름(예: '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'
            }
        }
    }
}
  1. 파이프라인 설정 페이지에서 'Pipeline script from SCM' 옵션을 선택하고, GitHub 저장소 URL과 Jenkinsfile 경로를 입력합니다[6].
  2. '저장' 후 'Build Now'를 클릭하면 파이프라인이 실행됩니다[6].
  3. 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)를 분리하여 운영하는 것을 권장합니다.

❤️ 이 글이 도움이 되셨다면 하트와 댓글 부탁드립니다! 궁금한 점은 언제든지 질문해주세요.


참고자료

[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

728x90
반응형