100===Dev Ops/Jenkins

Jenkins: CI/CD의 대명사, 자동화의 마법사 🎩

블로글러 2024. 10. 31. 00:43

안녕하세요! 오늘은 개발자들의 든든한 동반자 Jenkins에 대해 알아보겠습니다.

Jenkins가 뭔가요? 🤔

Jenkins는 소프트웨어 개발에서 빌드, 테스트, 배포를 자동화해주는 오픈소스 도구입니다.
마치 부지런한 집사처럼 개발자가 원하는 모든 작업을 자동으로 처리해줍니다!

  • 코드 변경사항 감지
  • 자동 빌드 및 테스트 실행
  • 배포 자동화
  • 결과 리포팅

Jenkins의 핵심 개념 🎯

1. Pipeline

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
        stage('Deploy') {
            steps {
                sh './deploy.sh'
            }
        }
    }
}

2. Job (프로젝트)

  • 실행할 작업의 단위
  • 빌드, 테스트, 배포 등의 작업을 정의
  • 순차적 또는 병렬 실행 가능

3. Build Trigger

  • SCM 폴링
  • 웹훅
  • 스케줄링 (cron)
  • 수동 실행

Jenkins의 강력한 기능들 💪

1. 플러그인 생태계

  • 5000개 이상의 플러그인
  • Git, Docker, AWS 등 다양한 도구와 통합
  • 커스텀 플러그인 개발 가능

2. 분산 빌드 시스템

graph LR
    A[Jenkins Master] --> B[Agent 1]
    A --> C[Agent 2]
    A --> D[Agent 3]

3. 보안 기능

  • 역할 기반 접근 제어 (RBAC)
  • LDAP/Active Directory 통합
  • 감사 로그

실제 활용 사례 📱

1. Spring Boot 애플리케이션 배포

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/myorg/myapp.git'
            }
        }
        stage('Build') {
            steps {
                sh './gradlew clean build'
            }
        }
        stage('Docker Build') {
            steps {
                sh 'docker build -t myapp .'
            }
        }
        stage('Deploy') {
            steps {
                sh 'docker-compose up -d'
            }
        }
    }
}

2. 프론트엔드 배포

pipeline {
    agent any
    stages {
        stage('Install') {
            steps {
                sh 'npm install'
            }
        }
        stage('Test') {
            steps {
                sh 'npm test'
            }
        }
        stage('Build') {
            steps {
                sh 'npm run build'
            }
        }
        stage('Deploy to S3') {
            steps {
                sh 'aws s3 sync build/ s3://my-bucket/'
            }
        }
    }
}

Jenkins의 장점 🌟

  1. 무료 오픈소스

    • 라이센스 비용 없음
    • 활발한 커뮤니티 지원
  2. 높은 확장성

    • 수많은 플러그인
    • 커스터마이징 가능
  3. 쉬운 설정

    • Web UI 제공
    • 직관적인 설정 방식

주의할 점 ⚠️

  1. 리소스 사용량

    • Java 기반으로 메모리 사용량 높음
    • 적절한 하드웨어 스펙 필요
  2. 보안 설정

    • 기본 설정으로는 취약할 수 있음
    • 보안 설정 필수
  3. 유지보수

    • 정기적인 업데이트 필요
    • 플러그인 호환성 체크

마치며 🎁

Jenkins는 현대 개발 환경에서 없어서는 안 될 중요한 도구입니다.
처음에는 설정이 까다로울 수 있지만, 한번 익숙해지면 개발 생산성을 크게 향상시킬 수 있습니다!


참고 자료:

728x90

'100===Dev Ops > Jenkins' 카테고리의 다른 글

Jenkins Introduced  (0) 2024.05.28