contents

젠킨스(Jenkins) 는 소프트웨어 개발 과정에서 사람이 직접 하지 않는 부분들을 자동화하는 데 도움을 주는 무료 오픈소스 자동화 서버입니다. 주로 지속적 통합 및 지속적 전달(CI/CD) 파이프라인을 구현하는 데 사용되며, 데브옵스(DevOps) 세계의 기초적인 도구입니다.

젠킨스를 코드 변경이 있을 때마다 소프트웨어를 자동으로 빌드, 테스트, 배포하는, 개발팀을 위한 강력하고 맞춤 설정 가능한 로봇으로 생각할 수 있습니다.


젠킨스의 역할 (왜 사용하는가)

젠킨스의 주된 목적은 전체 소프트웨어 전달 생명주기를 자동화하는 것입니다. 이는 버전 관리 시스템(Git 등), 빌드 도구(Maven, Gradle 등), 테스트 프레임워크, 그리고 배포 환경을 연결하는 중앙 제어 허브 역할을 합니다.

이 과정을 자동화함으로써 젠킨스는 몇 가지 핵심 문제를 해결합니다.


핵심 개념 및 아키텍처 🏗️

젠킨스는 분산된 컨트롤러-에이전트 아키텍처를 사용하여 작업을 관리합니다.


젠킨스 파이프라인 (코드형 파이프라인) 📜

젠킨스를 사용하는 가장 현대적이고 강력한 방법은 파이프라인을 통하는 것입니다. 젠킨스 파이프라인은 전체 CI/CD 프로세스를 일련의 단계(stage)로 정의합니다.

여기서 핵심 개념은 코드형 파이프라인(Pipeline as Code) 입니다. 웹 UI를 통해 Job을 설정하는 대신("프리스타일" Job), **Jenkinsfile**이라는 텍스트 파일에 전체 파이프라인을 정의합니다.

Jenkinsfile:

이 파일은 프로젝트의 소스 코드 저장소(예: Git 리포지토리)에 함께 존재합니다. 빌드, 테스트, 배포 프로세스의 모든 단계와 스텝을 정의합니다.

"코드형 파이프라인"이 왜 중요한가?

파이프라인 문법

Jenkinsfile을 작성하는 방법에는 두 가지가 있습니다.

  1. 선언형 파이프라인 (Declarative Pipeline): 더 새롭고 구조화되었으며 단순한 문법입니다. 대부분의 경우에 권장되는 접근 방식입니다. pipeline, agent, stages, stage, steps와 같은 명확한 블록을 사용합니다.

    Jenkinsfile 예시 (선언형):

    pipeline {
        agent any // 사용 가능한 아무 에이전트에서나 실행
    
        stages {
            stage('Build') {
                steps {
                    echo '애플리케이션 빌드 중...'
                    sh './gradlew build'
                }
            }
            stage('Test') {
                steps {
                    echo '테스트 실행 중...'
                    sh './gradlew test'
                }
            }
            stage('Deploy') {
                steps {
                    echo '스테이징 환경에 배포 중...'
                    // 배포 명령어가 여기에 들어갑니다.
                }
            }
        }
    }
  2. 스크립트 파이프라인 (Scripted Pipeline): Groovy 프로그래밍 언어를 기반으로 한 더 유연하고 강력한 문법입니다. 더 많은 프로그래밍적 제어를 제공하지만 학습 곡선이 더 가파릅니다.


젠킨스의 장점과 단점 ⚖️

장점 ✅

단점 ❌

결론적으로, 젠킨스는 데브옵스 세계의 강력하고 유연하며 검증된 일꾼입니다. GitHub Actions나 GitLab CI/CD와 같은 더 새롭고 통합된 도구들이 더 간단한 경험을 제공하지만, 젠킨스의 비할 데 없는 유연성과 플러그인 생태계는 자동화 분야에서 여전히 지배적인 위치를 차지하게 합니다.

references