Jenkins - Pipeline - 1 > Jenkins 자료실

본문 바로가기

사이트 내 전체검색

뒤로가기 Jenkins 자료실

Jenkins - Pipeline - 1

페이지 정보

작성자 snow 작성일 25-02-27 15:29 조회 1,434 댓글 0

본문

1. 개요 목차

이 게시글에서는 Jenkins Pipeline 개요에 대한 문서를 살펴보고, 예시만 안내드리는 글입니다.


1.1. Jenkins Pipeline 소개

Jenkins Pipeline(이하 Pipeline)은 단순히 “Pipeline”이라고도 불리며, 지속적 통합과 배포(Continuous Delivery) 과정을 손쉽게 자동화하고 시각화할 수 있도록 지원하는 기능 모음입니다. 특히 플러그인 형태로 제공되어 다양한 환경, 소스 코드 관리 도구(SCM), 도커(Docker) 같은 기술들과 연동이 유연하다는 점이 큰 장점입니다.

Pipeline은 소프트웨어를 빌드부터 배포까지 단계별로 구성하며, 각 단계를 코드로 정의하고 관리함으로써 반복적이고 안정적인 배포 프로세스를 구축할 수 있게 도와줍니다. 이러한 “지속적 배포(CD) 파이프라인”은 버전 관리 시스템에 저장된 소스를 통해 자동으로 빌드, 테스트, 그리고 배포 단계를 수행합니다. 이 모든 과정은 Jenkins 안에서 시각화되고 추적되므로, 운영자 입장에서 빠르게 상황을 파악하고 문제를 진단하기가 용이합니다.

Pipeline을 사용하면 빌드가 진행되는 여러 노드(Node)에서 단계(Stage)별로 일련의 작업을 정의할 수 있습니다. 사용자는 각 단계를 Jenkinsfile이라는 스크립트 파일로 작성하거나, Jenkins의 고전 UI 혹은 Blue Ocean 인터페이스를 통해 설정할 수 있습니다. Jenkinsfile은 프로젝트 소스와 함께 버전 관리되므로, 코드 리뷰와 변경 이력이 남는다는 장점이 있습니다. 이를 “Pipeline-as-code”라고 부르며, 운영 중인 파이프라인을 다른 사람과 공유하거나 유지 보수할 때 큰 이점을 제공합니다.

아울러 Pipeline은 단순히 빌드-테스트-배포의 선형 구조뿐 아니라, 병렬 작업 처리나 조건 분기, 외부 라이브러리 호출 등 복잡한 시나리오도 유연하게 처리할 수 있습니다. 이러한 다양한 사용 사례는 Declarative와 Scripted 파이프라인 구문을 통해 구현됩니다. 또한 Jenkins Shared Library를 활용하면 반복 로직이나 특정 기능을 공용 라이브러리화하여 여러 파이프라인에서 재사용할 수도 있어, 대규모 환경에서 매우 효율적입니다.


1.2. Pipeline 구성 요소

Jenkins Pipeline을 구성하는 핵심 개념은 다음과 같습니다.


1.2.1. Node

Node는 Jenkins 환경에 포함된 물리적 혹은 가상의 머신으로, 실제로 파이프라인 작업을 수행하는 대상입니다. Scripted Pipeline에서는 node 블록을 사용해 빌드 작업이 실행될 노드를 지정할 수 있습니다.


1.2.2. Stage

Stage는 파이프라인에서 논리적으로 구분되는 단계를 의미합니다. 예를 들어 “빌드(Build)”, “테스트(Test)”, “배포(Deploy)” 단계로 나눠 진행하면, 어디서 문제가 발생했는지 한눈에 파악할 수 있습니다. Blue Ocean이나 Pipeline Stage View 플러그인을 활용하면 시각적으로 어느 단계에서 파이프라인이 진행 중인지 쉽게 확인 가능합니다.


1.2.3. Step

Step은 Jenkins에 “무엇을 수행할지” 지시하는 가장 작은 명령 단위입니다. 예를 들어 “sh 'make'”와 같이 입력하면, 셸 스크립트로 make 명령을 실행하라는 지시가 됩니다. Declarative Pipeline, Scripted Pipeline 모두에서 Step을 활용할 수 있으며, 플러그인마다 고유의 Step을 제공하기도 합니다.


1.3. Pipeline 작성 방법

Pipeline을 작성하는 대표적인 방식은 Jenkinsfile을 사용하는 것입니다. Jenkinsfile은 프로젝트 루트 디렉터리에 저장되는 텍스트 파일로, Declarative 혹은 Scripted 형식 중 하나를 선택해 작성할 수 있습니다. Declarative는 구조가 명확하고 직관적이라 처음 도입 시 이해하기 쉽고, Scripted는 그루비(Groovy) 기반으로 보다 유연하게 복잡한 로직을 구현할 수 있습니다.

Jenkinsfile을 SCM(소스 코드 관리)과 함께 사용하면, 자동으로 모든 브랜치와 Pull Request에 대해 파이프라인 빌드가 수행될 수 있습니다. 이렇게 Jenkinsfile을 버전 관리에 포함하면 파이프라인 자체도 코드 리뷰 대상이 되어, 투명한 협업 환경을 구축하기 유리해집니다.


1.4. Declarative vs Scripted Pipeline

두 가지 파이프라인 구문 형식 중 Declarative는 다음과 같은 특징이 있습니다.

  • 가독성이 높고 기본 구조가 정형화되어 있어, 초보자도 쉽게 파이프라인을 작성할 수 있습니다.
  • 포괄적인 파이프라인을 단순화해 관리할 수 있습니다.

반면 Scripted Pipeline은 자유도가 높아 복잡한 로직을 구현할 때 적합합니다. 그루비 스크립트를 활용해 조건문, 반복문 등을 폭넓게 사용할 수 있어, 특정 시점에서 동적으로 파이프라인 흐름을 조절해야 할 경우 유리합니다.


1.5. Pipeline 활용 시 이점

Pipeline을 사용하면 여러 가지 장점을 얻을 수 있습니다.

  • 코드: 빌드부터 배포 과정까지 모두를 코드 형태로 작성하므로, 소스 제어 시스템을 통해 버전 관리와 리뷰가 가능합니다.
  • 내구성: Jenkins가 재시작되더라도 파이프라인이 자동으로 이어서 동작하여, 예기치 않은 상황에서도 안정적입니다.
  • 중간 정지: 승인이나 특정 검증이 필요할 경우 잠시 정지하고, 조건을 만족하면 다시 실행을 이어갈 수 있습니다.
  • 병렬 처리: 테스트나 빌드 단계를 병렬로 분기하여 시간 단축 및 효율화가 가능합니다.
  • 확장성: Docker, 공유 라이브러리, 기타 플러그인을 통해 Pipeline 기능을 다방면으로 확장할 수 있습니다.

특히 Docker 컨테이너를 사용하면, 파이프라인에서 격리된 환경을 온디맨드로 생성해 동일한 조건에서 테스트 및 빌드 과정을 재현할 수 있습니다. 이러한 환경 격리는 문제 상황 재현과 디버깅에도 큰 도움을 줍니다.


1.6. Freestyle Job과 Pipeline의 차이

기존의 Jenkins Freestyle Job을 사용하면 간단한 자동화 작업을 순차적으로 연결하거나 여러 플러그인을 조합할 수 있습니다. 그러나 복잡한 빌드 파이프라인을 구성하려면 다소 제한적이며, 관리가 쉽지 않았습니다. 이에 반해 Pipeline은 “파이프라인”이라는 단일 개념 안에서 단계적 구조를 직관적으로 표현하고, 코드 기반으로 관리하므로 유지보수 및 추적이 훨씬 간편합니다.


1.7. 실제 예시: Pipeline 프로젝트 준비

이제 간단한 터미널 명령 예시를 살펴보겠습니다. 아래 명령은 새 디렉터리를 만들고, Jenkinsfile을 생성하여 기본 Pipeline 구조를 실습해볼 수 있도록 준비해줍니다.

```bash

mkdir jenkins-pipeline-test

cd jenkins-pipeline-test

touch Jenkinsfile

```

해당 명령을 실행할 시 jenkins-pipeline-test라는 디렉터리를 만들고, Jenkinsfile 파일을 생성합니다. 이렇게 디렉터리가 준비되면, Jenkinsfile에 Declarative 또는 Scripted Pipeline 코드를 넣어 간단한 빌드 단계를 구현해볼 수 있습니다. 또한 이를 SCM과 연동하면 변경 사항을 추적하거나 Pull Request를 통해 파이프라인 자체를 리뷰하는 환경도 쉽게 구축할 수 있습니다.


1.8. Pipeline을 확장하는 방법

큰 규모의 프로젝트나 조직에서 파이프라인을 효율적으로 관리하기 위해서는 공유 라이브러리를 통한 확장이 필수적일 수 있습니다. Jenkins Shared Library를 사용하면 반복적인 스크립트나 로직을 분리하여, 여러 파이프라인에서 해당 코드를 재사용함으로써 유지보수성을 크게 높일 수 있습니다. 예를 들어 공용 배포 함수나 반복되는 테스트 로직을 라이브러리로 만들어 두면, 각 파이프라인에서 간단히 호출만 하여 일관된 결과와 편의성을 얻을 수 있습니다.

또한 Docker와 결합하면 개별 스테이지에서 특정 이미지의 컨테이너를 기동해 테스트나 빌드를 수행하고 종료할 수 있습니다. 이로써 환경 차이에 의해 발생하는 문제를 줄이고, 동일한 환경에서 여러 사람이 협업하기가 훨씬 수월해집니다.

출처: [Jenkins] https://www.jenkins.io/doc/book/installing/docker (CC BY-SA 4.0)

댓글목록 0

등록된 댓글이 없습니다.

Copyright © 소유하신 도메인. All rights reserved.

사이트 정보

회사명 : (주)리눅스데이타시스템 / 대표 : 정정모
서울본사 : 서울특별시 강남구 봉은사로 114길 40 홍선빌딩 2층 / tel : 02-6207-1160
대전지사 : 대전광역시 유성구 노은로174 도원프라자 5층 / tel : 042-331-1161

PC 버전으로 보기