Jenkins - Pipeline - 2 > Jenkins 자료실

본문 바로가기
사이트 내 전체검색

Jenkins 자료실

Jenkins - Pipeline - 2

페이지 정보

profile_image
작성자 snow
댓글 0건 조회 1,254회 작성일 25-02-28 09:15

본문

1. 인삿말

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


2. Jenkins Pipeline 개요

Jenkins를 오래 사용해 오신 분들이라면, 빌드 자동화에서 배포까지 이어지는 과정을 좀 더 견고하고 확실하게 관리하기 위해 Pipeline 기능을 활용해본 경험이 많을 것으로 생각합니다. Jenkins Pipeline은 여러 단계(stage)로 구성된 CI/CD 프로세스를 코드 형태로 정의하여, 복잡한 작업을 자동화하고 유지보수를 용이하게 만들어줍니다. 간단히 말해서, Declarative PipelineScripted Pipeline 두 가지 문법 형태로 구성되며, 이를 통해 사용자는 빌드부터 테스트, 배포 등 일련의 과정을 직관적으로 정의할 수 있습니다.

Pipeline 코드를 어떻게 작성하느냐에 따라 작업의 난이도나 유지보수성이 크게 달라집니다. Declarative 형식은 직관적이고 일관된 구조를 보장하며, Scripted 형식은 자유도가 높아 복잡한 로직을 유연하게 구현할 수 있다는 장점이 있습니다. 이 글에서는 Declarative Pipeline과 Scripted Pipeline의 차이점, 그리고 예시를 통해 Jenkins Pipeline을 어떻게 구성할 수 있는지 살펴보도록 하겠습니다. 또한 실제로 Pipeline에 추가 가능한 단계(stage)나 관련된 step(예: sh, junit 등)에 대해서도 이야기를 나눠보겠습니다.


2.1 Declarative Pipeline 기본 구조

Declarative Pipeline 문법에서는 pipeline 블록이 전체 파이프라인을 정의합니다. agent 지시자를 통해 파이프라인을 수행할 노드를 결정하고, stages 블록 안에 여러 stage를 배치하여 빌드, 테스트, 배포 등 여러 단계를 선언형으로 구성하게 됩니다. 아래는 Declarative Pipeline의 매우 간단한 예시 형태를 (중괄호 대신 괄호로 바꿔) 적어보았습니다. 실제 Jenkinsfile과 다르게 보이겠지만, 중괄호 사용을 피하기 위해 형태만 간략히 전환한 것입니다.

```groovy

// Declarative

pipeline (

 agent any

 stages (

  stage('Build') (

   steps (

    // 빌드와 관련된 명령

   )

  )

  stage('Test') (

   steps (

    // 테스트 관련 명령

   )

  )

  stage('Deploy') (

   steps (

    // 배포 관련 명령

   )

  )

 )

)

```

Declarative Pipeline에서 매우 유용한 점은 어떤 stage가 실행되는지, 실행되지 않는지 쉽게 제어할 수 있고, 시각적으로도 Jenkins UI에서 흐름을 직관적으로 확인할 수 있다는 것입니다. 또한 선언형 문법 덕분에 파이프라인 구조가 명확하게 드러나므로, 팀 내 협업 시에도 코드 가독성이 한층 좋아집니다. Declarative Pipeline에서 자주 쓰이는 문법 요소는 아래와 같습니다.

  • pipeline: 전체 파이프라인을 감싸는 블록
  • agent: 사용할 노드나 환경을 정의 (예: any, label 등)
  • stages: 여러 단계를 담고 있는 블록
  • stage: 빌드, 테스트, 배포 등 구체적인 단계
  • steps: stage 내부에서 실행할 실제 명령어 또는 스크립트

2.2 Scripted Pipeline 기본 구조

Scripted Pipeline 문법은 자유도가 높은 Groovy 스크립트 형태로 작성됩니다. 일반적으로 node 블록을 사용하여 실제 Jenkins의 빌드 노드에서 실행되는 작업을 정의하고, stage 블록을 통해 단계를 구분합니다. Scripted Pipeline은 여러 조건 분기나 반복문, 함수 등을 자유자재로 활용할 수 있어, 복잡한 상황이나 커스텀 로직이 필요한 경우에 적합합니다.

예시로 Scripted Pipeline을 (역시 중괄호 대신 괄호로 대체한) 형태로 살펴보겠습니다.

```groovy

// Scripted

node (

 stage('Build') (

  // 빌드와 관련된 명령

 )

 stage('Test') (

  // 테스트와 관련된 명령

 )

 if (현재 빌드 결과가 SUCCESS라면) (

  stage('Deploy') (

   // 배포 관련 작업

  )

 )

)

```

Scripted Pipeline에서 node 블록 안에 여러 stage를 배치하게 되는데, 이는 Jenkins의 특정 노드에서 작업을 수행하고, 해당 노드의 작업 공간(workspace) 내에서 소스 코드를 체크아웃하거나 테스트를 실행할 수 있게 합니다. Scripted Pipeline 문법은 Jenkins 환경에 따라 보다 세밀한 컨트롤이 가능하므로, 스크립트를 통해 여러 로직을 적용하고 싶은 고급 사용자에게 적합합니다.


2.3 Declarative와 Scripted의 차이점

Declarative Pipeline은 코드 구조가 비교적 깔끔하고 정형화되어 있어, 간단한 CI/CD 파이프라인을 빠르게 작성할 수 있습니다. 반면 Scripted Pipeline은 선언형 문법에 없는 복잡한 로직을 자유롭게 구현할 수 있는 장점이 있지만, 구조나 가독성 측면에서 설계에 좀 더 유의해야 합니다.

결국 선택은 팀 문화와 프로젝트 요구사항에 따라 달라집니다. 빌드부터 테스트, 배포까지 비교적 정형화된 단계가 반복적으로 존재한다면 Declarative가 좋고, 단계 중 특정 로직(예: 동적 분기 처리, 여러 환경 변수 동시 활용 등)을 구현해야 한다면 Scripted가 좋습니다.

2.4 Pipeline 예시 및 활용

아래 예시는 Declarative Pipeline과 Scripted Pipeline을 간단히 대비한 형태입니다(코드 예시 또한 중괄호를 괄호로 대체했습니다). Declarative Pipeline에서는 pipeline 블록으로 시작해 agent, stages 등을 선언하고, Scripted Pipeline에서는 node 블록으로 작업을 정의한 뒤 각 단계를 stage로 구분합니다.

```groovy

// Declarative

pipeline (

 agent any

 stages (

  stage('Build') (

   steps (

    sh 'make'

   )

  )

  stage('Test') (

   steps (

    sh 'make check'

    junit 'reports/**/*.xml'

   )

  )

  stage('Deploy') (

   steps (

    sh 'make publish'

   )

  )

 )

)

// Scripted

node (

 stage('Build') (

  sh 'make'

 )

 stage('Test') (

  sh 'make check'

  junit 'reports/**/*.xml'

 )

 if (currentBuild.currentResult == 'SUCCESS') (

  stage('Deploy') (

   sh 'make publish'

  )

 )

)

```

위 코드에서 볼 수 있듯이, Declarative Pipeline에서는 pipeline과 agent, stages, steps 등의 요소가 두드러지며, Scripted Pipeline에서는 node를 기반으로 stage가 나열됩니다. 또한 Scripted Pipeline에서는 if (조건) 형태를 통해 동적 분기를 처리해 성공 시에만 배포 단계가 실행되도록 제어하고 있습니다.


2.5 터미널 명령을 통한 Jenkins 작업 예시

Jenkins 환경에서 흔히 사용하는 CLI(Command Line Interface)나 시스템 명령어를 통해 빌드나 배포 과정을 점검할 일이 많습니다. 예를 들어, Jenkins 설정 파일 혹은 plugin 목록을 확인하거나, 특정 파이프라인 구성을 확인할 때 다음과 같은 명령어를 활용하기도 합니다.

```bash

jenkins --version

```

위 명령어를 실행할 시 현재 설치된 Jenkins의 버전을 확인할 수 있습니다. Plugin 호환성 검토나 보안 패치 적용 시 중요한 부분입니다.

또한 빌드 스크립트가 실제로 문제없이 동작하는지, Pipeline에서 sh 단계를 거쳐 다음과 같이 수동으로 테스트해볼 수도 있습니다.

```bash

cd (프로젝트 위치)

make clean && make

```

이 명령을 실행하면 프로젝트를 깨끗하게 초기화(clean)한 뒤 다시 빌드(make)함으로써, 문제가 발생하는 단계가 있는지 빠르게 수동 점검할 수 있습니다.

추가로 Jenkins CLI를 이용하면, Jenkins 웹 UI를 통하지 않고도 특정 잡(Job)을 실행하거나 재시작할 수 있습니다. 예를 들면 다음과 같은 명령을 사용할 수 있습니다.

```bash

java -jar jenkins-cli.jar -s http://(Jenkins_URL)/ -auth (사용자):(API_TOKEN) build (잡이름)

```

위 명령을 실행할 시 해당 잡을 수동으로 빌드할 수 있습니다. 자동화 파이프라인이 주로 동작하더라도, 갑작스러운 에러나 환경 문제가 발생했을 때 CLI를 통해 빠른 대응이 가능합니다.


3. 마무리

Jenkins Pipeline은 CI/CD 과정에서 핵심적인 역할을 수행하며, Declarative Pipeline과 Scripted Pipeline 두 가지 문법을 통해 다양한 요구사항을 유연하게 구현할 수 있습니다. Declarative Pipeline은 구조적이고 직관적인 선언 방식을 제공하므로, 빠른 파이프라인 구성과 협업에 강점을 지니고 있습니다. 반면 Scripted Pipeline은 자유도 높은 Groovy 문법을 지원하여 복잡한 로직이나 분기 처리가 필요한 상황에서 효율을 발휘합니다.

특히 Declarative 방식에서 제공하는 옵션(예: skipStagesAfterUnstable) 등은 빌드의 안정성을 확보하고, 반복적인 단계를 자동화하는 데 큰 도움을 줍니다. Scripted Pipeline을 사용할 때는 코드 가독성에 주의하면서, 필요하다면 분리된 함수나 라이브러리 형태로 관리하여 유지보수를 편하게 하는 전략도 고려해볼 만합니다.

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

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

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

접속자집계

오늘
2,331
어제
2,585
최대
8,445
전체
2,034,541
Copyright © www.linuxdata.org All rights reserved.