CICD 및 버전 관리/CICD

[CI/CD] Jenkins 파이프라인 설정

ioh'sDeveloper 2025. 1. 5. 20:05

Jenkins 파이프라인 설정 가이드

1. Jenkins Pipeline 개요

Jenkins Pipeline은 CI/CD(Continuous Integration/Continuous Deployment) 프로세스를 자동화하기 위해 Jenkins에서 제공하는 기능으로, 코드 빌드, 테스트, 배포까지 모든 단계를 코드로 정의할 수 있는 도구입니다. 기존의 Freestyle Job 방식과 달리 파이프라인 스크립트를 사용하여 지속적인 통합과 배포를 체계적으로 관리할 수 있습니다.

1.1 Pipeline의 종류

  • Declarative Pipeline: 선언형 구문을 사용하여 간결하고 가독성이 높은 파이프라인을 정의합니다.
  • Scripted Pipeline: Groovy 스크립트를 활용하여 복잡한 논리 처리가 필요한 파이프라인을 정의할 수 있습니다.

2. Jenkins 설치 및 초기 설정

2.1 Jenkins 설치

  • Ubuntu 환경에서 Jenkins 설치:
    sudo apt update
    sudo apt install openjdk-11-jdk
    wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
    sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
    sudo apt update
    sudo apt install jenkins
    

2.2 초기 설정

  • Jenkins 서비스 시작:
    sudo systemctl start jenkins
    
  • 관리자 비밀번호 확인 및 Jenkins 초기 설정 완료.

3. Pipeline 생성 및 구성

3.1 Declarative Pipeline 구성 예제

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building...'
                sh 'mvn clean install'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...'
                sh 'mvn test'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying...'
                sh 'scp target/myapp.jar user@server:/path/to/deploy'
            }
        }
    }
}

3.2 Scripted Pipeline 구성 예제

node {
    stage('Checkout') {
        checkout scm
    }
    stage('Build') {
        try {
            sh 'mvn clean install'
        } catch (Exception e) {
            error 'Build failed'
        }
    }
    stage('Test') {
        sh 'mvn test'
    }
    stage('Deploy') {
        if (currentBuild.result == 'SUCCESS') {
            sh 'scp target/myapp.jar user@server:/path/to/deploy'
        }
    }
}

4. Pipeline 설정 Best Practices

  1. 코드 관리: Jenkinsfile을 소스 코드와 함께 관리하여 버전 관리가 용이하도록 합니다.
  2. 환경 변수 사용: 반복되는 값을 환경 변수로 설정하여 재사용성을 높입니다.
  3. 에러 핸들링: 각 단계에서 예외 처리를 추가하여 문제 발생 시 적절한 조치를 취합니다.
  4. 병렬 단계 구성: 테스트 단계에서 병렬로 테스트를 수행하여 파이프라인 실행 시간을 단축합니다.

5. Multibranch Pipeline 설정

Multibranch Pipeline은 Git 브랜치별로 파이프라인을 자동으로 생성하고 관리할 수 있는 기능입니다. 이를 통해 브랜치 전략에 따라 CI/CD를 효율적으로 관리할 수 있습니다.

설정 방법

  1. Jenkins 대시보드에서 새로운 Item을 생성합니다.
  2. "Multibranch Pipeline"을 선택합니다.
  3. Git Repository URL을 입력하고 자격 증명을 설정합니다.
  4. "Branch Sources"에서 빌드할 브랜치를 선택합니다.
  5. 저장 후 빌드를 실행합니다.

6. Pipeline 플러그인 활용

Jenkins Pipeline을 확장하기 위해 다양한 플러그인을 활용할 수 있습니다. 다음은 주요 플러그인 목록입니다.

플러그인명 설명

Blue Ocean 파이프라인 시각화 도구
Pipeline: Stage View 단계별 실행 결과를 보여주는 플러그인
Credentials Binding 자격 증명 관리를 쉽게 할 수 있는 플러그인
Git Parameter Git 브랜치 선택 기능 제공

7. 실제 프로젝트에 적용하기

7.1 Maven 프로젝트 적용 사례

  1. 프로젝트 구성:
    • Git Repository에 Jenkinsfile 추가
    • Jenkins에서 Multibranch Pipeline 설정
  2. 파이프라인 구성:
    pipeline {
        agent any
        environment {
            JAVA_HOME = "/usr/lib/jvm/java-11-openjdk-amd64"
            PATH = "$JAVA_HOME/bin:$PATH"
        }
        stages {
            stage('Build') {
                steps {
                    sh 'mvn clean install'
                }
            }
            stage('Deploy') {
                steps {
                    sh 'scp target/*.jar user@server:/app/deploy'
                }
            }
        }
    }
    

8. 결론

Jenkins Pipeline은 DevOps 환경에서 CI/CD 프로세스를 자동화하고 프로젝트의 신뢰성과 배포 속도를 높이는 데 필수적인 도구입니다. Declarative Pipeline과 Scripted Pipeline을 적절히 활용하여 다양한 요구사항에 맞는 파이프라인을 설계하고, Multibranch Pipeline을 통해 브랜치 전략을 효과적으로 관리할 수 있습니다. Jenkins를 통한 지속적인 통합과 배포를 통해 개발 생산성을 극대화할 수 있습니다.