Jenkins 파이프라인 소개

JenkinsBeginner
지금 연습하기

소개

Jenkins 파이프라인의 기초에 대한 실습에 오신 것을 환영합니다. Jenkins 파이프라인은 빌드, 테스트 및 배포 프로세스 전체를 코드로 정의할 수 있는 강력한 기능입니다. 이 정의는 일반적으로 애플리케이션 소스 코드와 함께 버전 관리되는 Jenkinsfile이라는 텍스트 파일에 저장됩니다. 이 방식을 "파이프라인-as-Code"라고 합니다.

이 실습에서는 구조적이고 사용자 친화적인 파이프라인 생성 방법을 제공하는 선언형 파이프라인 (Declarative Pipeline) 구문에 중점을 둘 것입니다. 이 실습이 끝나면 다음을 수행할 수 있습니다.

  • Jenkins 웹 인터페이스에서 새 파이프라인 프로젝트 생성하기
  • 선언형 구문을 사용하여 기본 Jenkinsfile 작성하기
  • 로컬 Git 저장소의 Jenkinsfile을 사용하도록 프로젝트 구성하기
  • 파이프라인 실행 및 출력 검사하기
  • 파이프라인을 여러 단계로 구성하기
  • 환경 변수를 사용하여 구성 관리하기

컨테이너에서 Jenkins 인스턴스가 이미 실행 중입니다. 시작하겠습니다.

Jenkins 에서 파이프라인 프로젝트 생성하기

첫 번째 단계는 Jenkins 에 새로운 파이프라인 프로젝트를 생성하는 것입니다. 이 프로젝트 유형은 Jenkinsfile에 정의된 파이프라인을 실행하도록 특별히 설계되었습니다.

  1. 데스크톱 인터페이스에서 Firefox 브라우저를 엽니다. 브라우저는 자동으로 http://localhost:8080으로 열리므로 URL 을 수동으로 입력할 필요가 없습니다. 로그인도 필요하지 않습니다.
  2. Jenkins 대시보드에서 왼쪽 메뉴의 New Item을 클릭합니다.
  3. Enter an item name 필드에 my-first-pipeline을 입력합니다.
  4. 프로젝트 유형 목록에서 Pipeline을 선택합니다.
  5. 페이지 하단의 OK 버튼을 클릭합니다.

Jenkins dashboard New Item button

  1. 프로젝트 구성 페이지로 이동됩니다. 현재는 설정을 그대로 두고 진행합니다. 페이지 하단으로 스크롤하여 Save를 클릭합니다.

이제 비어 있는 파이프라인 프로젝트가 생성되었습니다. 다음 단계에서는 Jenkinsfile을 생성하고 이 프로젝트가 이를 사용하도록 구성할 것입니다.

SCM 을 원격 저장소 사용하도록 구성하기

이제 Jenkins 프로젝트가 원격 Git 저장소에서 파이프라인 정의를 가져오도록 구성할 것입니다. 사전 구성된 Jenkinsfile과 샘플 애플리케이션을 포함하는 데모 저장소를 사용하겠습니다.

데모 저장소는 다음 위치에 있습니다: https://github.com/labex-labs/jenkins-demo

원격 저장소에서 사용할 Jenkinsfile을 살펴보겠습니다:

pipeline {
    agent any
    environment {
        DEPLOY_TARGET = 'staging'
    }
    stages {
        stage('Build') {
            steps {
                echo 'Building the application...'
                sh 'echo "Compiling source code..."'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing the application...'
                sh 'echo "Running unit tests..."'
            }
        }
        stage('Deploy') {
            steps {
                echo "Deploying the application to ${env.DEPLOY_TARGET}..."
                sh 'echo "Application deployed successfully!"'
            }
        }
    }
}

이 선언형 파이프라인 스크립트는 여러 단계를 포함하며 주요 개념을 보여줍니다:

  • pipeline { ... }: 전체 파이프라인을 정의하는 메인 블록입니다.
  • agent any: Jenkins 에게 사용 가능한 에이전트에서 이 파이프라인을 실행하도록 지시합니다.
  • environment { ... }: 파이프라인 전체에서 사용할 수 있는 환경 변수를 정의합니다.
  • stages { ... }: 파이프라인의 모든 단계를 감싸는 래퍼입니다.
  • stage('...') { ... }: 특정 단계를 정의합니다. 단계는 워크플로우를 시각화하는 데 도움이 됩니다.
  • steps { ... }: 단계에서 실행될 실제 명령을 포함합니다.
  • echo '...': 빌드 로그에 메시지를 출력하는 단계입니다.
  • sh '...': 쉘 명령을 실행하는 단계입니다.

이제 원격 저장소를 사용하도록 Jenkins 프로젝트를 구성합니다:

  1. 브라우저에서 Jenkins UI 로 돌아가 my-first-pipeline 프로젝트 페이지로 이동합니다.
  2. 왼쪽 메뉴에서 Configure를 클릭합니다.
  3. Pipeline 섹션으로 스크롤합니다.
  4. Definition 드롭다운을 "Pipeline script"에서 Pipeline script from SCM으로 변경합니다.
  5. 나타나는 SCM 드롭다운에서 Git을 선택합니다.
  6. Repository URL 필드에 다음을 입력합니다: https://github.com/labex-labs/jenkins-demo
  7. Script Path 필드에 다음을 입력합니다: introduction-to-pipelines/Jenkinsfile
  8. Save를 클릭합니다.

Jenkins pipeline configuration for remote Git repository

이제 프로젝트가 원격 GitHub 저장소에 정의된 파이프라인을 실행하도록 설정되었습니다.

파이프라인 실행 및 출력 확인

프로젝트 구성이 완료되었으므로, 파이프라인을 실행하고 작동하는 것을 확인해 보겠습니다.

  1. my-first-pipeline 프로젝트 페이지에서 왼쪽 메뉴의 Build Now를 클릭합니다.

  2. 새 빌드가 예약되고 왼쪽의 Build History 패널에 나타납니다. 이력 아래의 Stage View에는 "Build" 단계가 실행되고 완료되면 녹색으로 바뀌는 것을 보여줍니다.

    Pipeline stage view showing build progress

  3. 자세한 출력을 보려면 Build History 에서 빌드 번호 (예: #1) 를 클릭합니다.

  4. 빌드 요약 페이지에서 왼쪽 메뉴의 Console Output을 클릭합니다.

    Console output showing successful pipeline execution

  5. 로그를 스크롤합니다. 파이프라인 단계의 메시지를 찾을 수 있으며, 파이프라인이 성공적으로 실행되었음을 확인할 수 있습니다.

...
[Pipeline] { (Build)
[Pipeline] echo
Building the application...
[Pipeline] sh
+ echo Compiling source code...
Compiling source code...
[Pipeline] } // stage
[Pipeline] { (Test)
[Pipeline] echo
Testing the application...
[Pipeline] sh
+ echo Running unit tests...
Running unit tests...
[Pipeline] } // stage
[Pipeline] { (Deploy)
[Pipeline] echo
Deploying the application to staging...
[Pipeline] sh
+ echo Application deployed successfully!
Application deployed successfully!
[Pipeline] } // stage
...
Finished: SUCCESS

첫 번째 파이프라인을 성공적으로 실행하고 출력을 확인했습니다. 원격 저장소의 Jenkinsfile 에 정의된 세 가지 단계 (Build, Test, Deploy) 가 자동으로 실행된 방식을 확인해 보세요.

파이프라인의 여러 단계 이해하기

실제 파이프라인은 애플리케이션 빌드, 테스트, 배포와 같은 여러 단계로 구성됩니다. 원격 저장소의 Jenkinsfile에는 이미 이러한 개별 단계가 포함되어 있어 이 중요한 개념을 보여줍니다.

파이프라인이 여러 단계로 어떻게 구성되는지 살펴보겠습니다:

stages {
    stage('Build') {
        steps {
            echo 'Building the application...'
            sh 'echo "Compiling source code..."'
        }
    }
    stage('Test') {
        steps {
            echo 'Testing the application...'
            sh 'echo "Running unit tests..."'
        }
    }
    stage('Deploy') {
        steps {
            echo "Deploying the application to ${env.DEPLOY_TARGET}..."
            sh 'echo "Application deployed successfully!"'
        }
    }
}
  1. my-first-pipeline 프로젝트의 Jenkins UI 로 돌아가 아직 실행하지 않았다면 Build Now를 클릭하여 파이프라인을 다시 실행합니다.

  2. 프로젝트 대시보드의 Stage View를 관찰합니다. "Build", "Test", "Deploy" 단계를 나타내는 세 개의 열이 보일 것입니다. Jenkins 는 빌드가 각 단계를 통과할 때 진행 상황을 시각화합니다.

    Jenkins Stage View showing Build Test Deploy stages

  3. Stage View 에서 단계를 클릭하면 해당 특정 단계의 자세한 로그를 볼 수 있습니다.

  4. 각 단계가 순차적으로 실행되는 방식에 주목하세요. Jenkins 는 다음 단계로 진행하기 전에 한 단계가 성공적으로 완료될 때까지 기다립니다.

파이프라인을 단계별로 구성하면 모니터링하기 쉬운 명확하고 유지 관리 가능한 워크플로우를 만들 수 있습니다. 각 단계는 CI/CD 프로세스의 논리적 단계를 나타내므로 문제가 발생하는 위치를 쉽게 파악하고 빌드 진행 상황을 시각화할 수 있습니다.

파이프라인 환경 변수 이해하기

마지막 단계에서는 환경 변수에 대해 알아보겠습니다. environment 지시어를 사용하면 파이프라인 전체에서 사용할 수 있는 변수를 정의할 수 있으며, 이는 단계에 하드코딩하지 않고 구성 설정을 관리하는 데 이상적입니다.

원격 저장소의 Jenkinsfile은 배포 대상을 지정하는 환경 변수를 통해 이미 이 개념을 보여주고 있습니다.

환경 변수가 어떻게 정의되고 사용되는지 살펴보겠습니다:

pipeline {
    agent any
    environment {
        DEPLOY_TARGET = 'staging'
    }
    stages {
        // ... other stages ...
        stage('Deploy') {
            steps {
                echo "Deploying the application to ${env.DEPLOY_TARGET}..."
                sh 'echo "Application deployed successfully!"'
            }
        }
    }
}

Jenkins 파이프라인에서 환경 변수에 대한 주요 사항:

  • environment { ... } 블록은 파이프라인 전체에서 사용할 수 있는 변수를 정의합니다.
  • 변수는 ${env.VARIABLE_NAME} 구문을 사용하여 액세스합니다.
  • Groovy 의 변수 보간은 큰따옴표 안에서만 작동하므로, 변수 보간이 포함된 문자열에는 큰따옴표 (") 를 사용하는 것이 중요합니다.
  • 환경 변수를 사용하면 파이프라인이 더 유연해지고 유지 관리하기 쉬워집니다.
  1. 아직 실행하지 않았다면 Build Now를 클릭하여 Jenkins 에서 새 빌드를 트리거합니다.

  2. 빌드가 완료된 후 빌드의 Console Output을 확인합니다. "Deploy" 단계의 로그에서 변수가 올바르게 치환된 것을 볼 수 있습니다.

...
[Pipeline] { (Deploy)
[Pipeline] echo
Deploying the application to staging...
[Pipeline] sh
+ echo Application deployed successfully!
Application deployed successfully!
[Pipeline] } // stage
...
Finished: SUCCESS
  1. DEPLOY_TARGET 환경 변수 값 staging이 echo 문에 자동으로 치환된 것을 확인합니다.

환경 변수는 파이프라인 코드 자체를 수정하지 않고도 다양한 환경 (개발, 스테이징, 프로덕션) 에 맞게 쉽게 구성할 수 있는 유연한 파이프라인을 만드는 데 필수적입니다.

요약

축하합니다! Jenkins 파이프라인 소개를 성공적으로 완료했습니다. 코드로서 CI/CD 워크플로우를 정의하는 핵심 개념을 배웠습니다.

이 실습에서는 다음을 연습했습니다:

  • Jenkins UI 에서 파이프라인 프로젝트 생성하기.
  • 원격 Git 저장소 (SCM) 에서 Jenkinsfile을 사용하도록 프로젝트 구성하기.
  • 여러 단계로 구성된 선언적 파이프라인 (Declarative Pipeline) 의 구조 이해하기.
  • 파이프라인 실행 및 콘솔 출력 검사하기.
  • 명확성과 구성을 위해 파이프라인이 논리적 단계로 구성되는 방식 관찰하기.
  • 파이프라인을 더 동적으로 만들기 위해 환경 변수가 정의되고 사용되는 방식 이해하기.

이러한 기초 기술은 정교한 자동화 파이프라인을 구축하는 데 필수적입니다. 이제 매개변수 사용, 자격 증명 관리, 다양한 빌드 및 배포 도구와의 통합과 같은 고급 주제를 탐색할 준비가 되었습니다.