필수 Jenkins 플러그인: 선택 및 구성 가이드

파이프라인, SCM, 빌드, 테스트, 알림 및 자격 증명을 위한 필수 Jenkins 플러그인을 선택하고 구성하세요.

필수 Jenkins 플러그인: 선택 및 구성 가이드

Jenkins 플러그인은 CI/CD 서버를 유용하게 만들 수도 있고, 취약하게 만들 수도 있습니다. 어려운 점은 플러그인을 찾는 것이 아니라, 작업에 실제로 필요한 몇 가지 Jenkins 플러그인을 선택하고 유지 관리하는 것입니다.

이 가이드에서는 일반적인 플러그인 카테고리, 실제 예제, 그리고 플러그인이 많은 Jenkins 설치를 업그레이드하기 어렵지 않게 유지하는 관리 습관을 다룹니다.

Jenkins 플러그인 생태계 이해하기

Jenkins 플러그인 생태계는 방대하고 지속적으로 진화하고 있습니다. 플러그인은 Jenkins 커뮤니티에서 개발 및 유지 관리되며 기능에 따라 분류할 수 있습니다.

  • 빌드 도구 통합: Maven, Gradle, Ant 등과 같은 빌드 도구와 통합하기 위한 플러그인입니다.
  • 소스 코드 관리(SCM) 통합: Git, Subversion, Mercurial 및 기타 SCM 시스템에 연결하기 위한 플러그인입니다.
  • 테스트 프레임워크: 다양한 유형의 테스트(단위, 통합, 보안 등)를 실행하고 보고하기 위한 플러그인입니다.
  • 배포 및 릴리스 도구: 애플리케이션을 다양한 환경(예: Docker, Kubernetes, 클라우드 플랫폼)에 배포하기 위한 플러그인입니다.
  • 알림 및 보고: 빌드 상태 알림(이메일, Slack 등)을 보내고 보고서를 생성하기 위한 플러그인입니다.
  • 파이프라인 개선: 코드형 파이프라인(Jenkinsfile) 시각화 및 공유 라이브러리와 같은 Jenkins 파이프라인에 기능을 추가하는 플러그인입니다.
  • 보안 및 액세스 제어: Jenkins 보안을 강화하고 사용자 권한을 관리하기 위한 플러그인입니다.
  • 모니터링 및 성능: Jenkins 자체를 모니터링하기 위한 플러그인입니다.

플러그인 설치 및 관리

특정 플러그인을 살펴보기 전에 Jenkins 내에서 플러그인을 설치하고 관리하는 기본 프로세스를 이해하는 것이 중요합니다.

플러그인 관리자 액세스

  1. Jenkins 대시보드로 이동합니다.
  2. 왼쪽 메뉴에서 Jenkins 관리를 클릭합니다.
  3. 플러그인 관리를 선택합니다.

플러그인 설치

플러그인 관리 페이지에는 여러 탭이 있습니다.

  • 업데이트: 설치된 플러그인에 사용 가능한 업데이트 목록을 표시합니다.
  • 사용 가능: Jenkins 업데이트 센터에서 설치 가능한 모든 플러그인을 표시합니다.
  • 설치됨: Jenkins 인스턴스에 현재 설치된 플러그인을 표시합니다.
  • 고급: 업데이트 센터 구성, 플러그인 설치 관리 및 플러그인 파일 업로드 옵션을 제공합니다.

새 플러그인을 설치하려면:

  1. 사용 가능 탭으로 이동합니다.
  2. 이름이나 키워드로 원하는 플러그인을 검색합니다.
  3. 설치하려는 플러그인 옆의 확인란을 선택합니다.
  4. 페이지 하단의 다시 시작하지 않고 설치 또는 지금 다운로드하고 설치 후 다시 시작 버튼을 클릭합니다.

팁: 대부분의 플러그인의 경우 다시 시작하지 않고 설치로 충분하며 Jenkins는 백그라운드에서 자동으로 다운로드하여 설치합니다. 플러그인이 적용되기 위해 Jenkins 재시작이 필요한 경우 두 번째 옵션을 사용하세요.

플러그인 업데이트 및 제거

  • 업데이트: 업데이트 탭에서 업데이트하려는 플러그인을 선택하고 선택한 패키지 업그레이드를 클릭합니다. 또는 모두 업그레이드를 클릭합니다.
  • 제거: 설치됨 탭에서 제거하려는 플러그인 옆의 확인란을 선택하고 제거를 클릭합니다.

경고: 플러그인을 제거하면 해당 플러그인에 의존하는 기존 작업이 중단될 수 있습니다. 중요한 플러그인 관리 작업을 수행하기 전에 항상 Jenkins 구성을 백업하십시오.

일반적인 CI/CD 시나리오를 위한 필수 플러그인

다음은 일반적인 사용 사례별로 분류된 몇 가지 필수 플러그인입니다.

1. 코드형 파이프라인 및 워크플로 관리

Jenkins Pipeline은 일반적으로 Jenkinsfile에서 CI/CD 파이프라인을 코드로 정의할 수 있는 강력한 플러그인입니다. 이는 버전 관리, 재사용성 및 파이프라인의 더 나은 가시성을 촉진합니다.

  • Pipeline: 파이프라인 작업을 활성화하는 핵심 플러그인입니다. 최신 Jenkins 설치에서는 일반적으로 기본적으로 설치됩니다.
  • Pipeline: Declarative Pipeline: 더 구조화되고 독단적인 구문으로 Jenkinsfile 구문을 향상시킵니다. 새 파이프라인에 적극 권장됩니다.
  • Pipeline: Script Security: 파이프라인 작업에 사용되는 Groovy 스크립트를 관리하여 보안상의 이유로 스크립트를 승인하거나 거부할 수 있습니다.
  • Pipeline Utility Steps: readJSON, writeJSON, zip, unzipfileExists와 같은 파이프라인 스크립트에 유용한 단계를 제공합니다.

구성 예제 (Jenkinsfile - Declarative):

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building...' // 예제 단계
                // 여기에 빌드 명령을 추가하십시오 (예: mvn clean install)
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...' // 예제 단계
                // 여기에 테스트 명령을 추가하십시오 (예: mvn test)
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying...' // 예제 단계
                // 여기에 배포 명령을 추가하십시오
            }
        }
    }
    post {
        always {
            echo 'Pipeline finished.'
        }
        success {
            echo 'Pipeline succeeded!'
        }
        failure {
            echo 'Pipeline failed.'
        }
    }
}

2. 소스 코드 관리(SCM) 통합

빌드를 트리거하고 코드를 가져오려면 Jenkins가 SCM 시스템과 통합되어야 합니다.

  • Git Plugin: Git 리포지토리와 통합하는 데 필수적입니다. Git SCM 폴링, 코드 체크아웃 등을 지원합니다.
  • Subversion Plugin: 여전히 Subversion을 사용하는 팀을 위한 플러그인입니다.

구성 예제 (파이프라인의 Git):

stage('Checkout') {
    steps {
        git branch: 'main', url: 'https://github.com/your-username/your-repo.git'
    }
}

3. 빌드 도구 및 환경

이러한 플러그인은 Jenkins가 다양한 기술에 대한 빌드를 관리하고 실행하는 데 도움을 줍니다.

  • Maven Integration plugin: Maven을 사용하는 프로젝트용입니다. Maven 버전 및 목표 구성을 허용합니다.
  • Gradle Plugin: Gradle을 사용하는 프로젝트용입니다.
  • NodeJS Plugin: Jenkins 에이전트에서 다양한 Node.js 버전을 쉽게 설치하고 전환할 수 있습니다.

구성 예제 (파이프라인의 NodeJS Plugin):

pipeline {
    agent any
    tools {
        nodejs 'NodeJS 18.x' // 전역 도구 구성에서 구성된 이름
    }
    stages {
        stage('Install Dependencies') {
            steps {
                sh 'npm install'
            }
        }
        stage('Build Frontend') {
            steps {
                sh 'npm run build'
            }
        }
    }
}

NodeJS 또는 Maven과 같은 도구를 구성하려면:

  1. Jenkins 관리 -> 전역 도구 구성으로 이동합니다.
  2. 관련 도구(예: NodeJS)를 찾습니다.
  3. NodeJS 추가를 클릭하고 설치 방법(예: 자동 설치) 및 버전을 구성합니다.
  4. Jenkinsfile에서 참조할 설명적인 이름(예: NodeJS 18.x)을 지정합니다.

4. 테스트 및 보고

테스트 결과를 시각화하는 것은 코드 품질을 이해하고 회귀를 식별하는 데 중요합니다.

  • JUnit Plugin: JUnit XML 형식의 테스트 결과를 구문 분석하고 표시합니다. 대부분의 테스트 프레임워크가 이 형식을 생성할 수 있습니다.
  • Cobertura Plugin / JaCoCo Plugin: 코드 커버리지 보고용(Java 빌드 도구에 따라 다름).

구성 예제 (파이프라인의 JUnit):

stage('Test') {
    steps {
        // 테스트가 target/surefire-reports/에 결과를 생성한다고 가정
        junit 'target/surefire-reports/**/*.xml'
    }
}

이것이 작동하려면:

  1. 빌드 도구(예: Maven Surefire 플러그인)가 JUnit XML 보고서를 출력하도록 구성되어 있는지 확인하십시오.
  2. 테스트 실행 후 파이프라인에 junit 단계를 추가하십시오.

5. 알림 및 커뮤니케이션

팀에 빌드 상태를 알리는 것은 중요합니다.

  • Email Extension Plugin: 유연한 이메일 알림 기능을 제공합니다.
  • Slack Notification Plugin: Jenkins 빌드를 Slack 채널과 통합합니다.
  • Microsoft Teams Notification Plugin: Microsoft Teams를 위한 유사한 통합입니다.

구성 예제 (파이프라인의 Slack 알림):

먼저 Jenkins 관리 -> 시스템 구성에서 Slack 통합을 구성합니다. Slack 앱 통합 토큰이 필요합니다.

post {
    success {
        slackSend channel: '#ci-cd', message: 'Build #${env.BUILD_NUMBER} succeeded! - ${env.JOB_NAME}'
    }
    failure {
        slackSend channel: '#ci-cd', color: 'danger', message: 'Build #${env.BUILD_NUMBER} failed! Check logs: ${env.BUILD_URL}'
    }
}

6. 아티팩트 관리 및 보관

나중에 사용하거나 검사하기 위해 빌드 출력(아티팩트)을 저장합니다.

  • Archive the Artifacts: 빌드에서 생성된 파일을 보관하기 위한 내장 Jenkins 단계입니다.

구성 예제 (파이프라인에서 아티팩트 보관):

stage('Archive Artifacts') {
    steps {
        archiveArtifacts artifacts: 'target/*.jar', fingerprint: true
    }
}

이 단계는 target 디렉토리에서 발견된 모든 .jar 파일을 보관하고 지문을 활성화하여 빌드 및 작업 간 아티팩트 사용을 추적하는 데 도움이 됩니다.

7. 보안 및 자격 증명 관리

비밀번호, API 키, SSH 개인 키와 같은 민감한 정보를 안전하게 관리하는 것이 가장 중요합니다.

  • Credentials Plugin: 자격 증명 관리를 위한 표준 플러그인입니다. 다양한 유형의 자격 증명(사용자 이름/비밀번호, SSH 키, 토큰 등)을 제공합니다.
  • Credentials Binding Plugin: 빌드 단계 내에서 자격 증명을 환경 변수나 파일에 바인딩하여 민감한 데이터가 로그에 노출되지 않도록 합니다.

구성 예제 (파이프라인에서 자격 증명 사용):

  1. 자격 증명 추가: Jenkins 관리 -> 자격 증명 관리로 이동합니다. Jenkins로 범위가 지정된 저장소 아래에서 (global) 도메인을 클릭합니다. 자격 증명 추가를 클릭합니다. 유형(예: '사용자 이름 및 비밀번호')을 선택하고 세부 정보를 입력한 후 ID(예: my-docker-registry-creds)를 지정합니다.

  2. 파이프라인에서 사용:

    stage('Push to Docker Registry') {
        steps {
            withCredentials([usernamePassword(credentialsId: 'my-docker-registry-creds', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASS')]) {
                sh 'printf "%s" "$DOCKER_PASS" | docker login -u "$DOCKER_USER" --password-stdin'
                sh 'docker push my-registry/my-image:latest'
            }
        }
    }
    

플러그인 관리 모범 사례

  • 최소한으로 유지: 실제로 필요한 플러그인만 설치하십시오. 각 플러그인은 오버헤드를 추가합니다.
  • 정기적으로 검토: 설치된 플러그인을 정기적으로 검토하십시오. 더 이상 사용되지 않거나 중복되는 플러그인은 제거하십시오.
  • 신속하게 업데이트: 버그 수정, 보안 패치 및 새로운 기능을 활용하려면 플러그인을 최신 상태로 유지하십시오. 그러나 가능하면 스테이징 Jenkins 인스턴스에서 업데이트를 테스트하십시오.
  • 호환성 확인: 새 플러그인을 설치하기 전에 Jenkins 버전 및 다른 중요한 플러그인과의 호환성에 대한 문서를 확인하십시오.
  • 종속성 이해: 일부 플러그인은 다른 플러그인에 의존합니다. 플러그인 관리자가 일반적으로 처리하지만 잠재적인 충돌을 인지하십시오.
  • 보안 우선: 신뢰할 수 없는 소스의 플러그인을 설치할 때는 주의하십시오. 공식 Jenkins 업데이트 센터 또는 평판이 좋은 소스의 플러그인만 사용하십시오.

핵심 요점

실제 워크플로를 지원하는 플러그인(파이프라인, SCM, 빌드 도구, 테스트 보고, 알림 및 자격 증명)부터 시작하십시오. 설치하기 전에 플러그인 상태를 검토하고, 가능하면 프로덕션 환경이 아닌 곳에서 업데이트를 테스트하고, 활성 작업에서 사용하지 않는 플러그인은 제거하십시오.