Jenkins와 Pipeline

Jenkins는 워크 플로우를 자동화할 수 있는 오픈 소스 툴입니다. 소프트웨어의 지속적 통합(Continuous Integration, CI)과 지속적 배포(Continuous Delivery, CD)를 간단하게 구현할 수 있도록 도와주죠. 특히 Jenkins의 Pipeline을 사용하면 배포 과정을 더욱 쉽고 빠르게 구축할 수 있기 때문에, CI/CD 프로세스를 구현할 때 Jenkins를 사용하는 경우가 많습니다.

지속적 배포(CD) 파이프라인을 예로 들어 Jenkins의 Pipeline에 대해 더 살펴보겠습니다. CD 파이프라인은 소프트웨어를 버전 관리 시스템(예: GitHub)에서부터 사용자 및 클라이언트에게로까지 바로 전달하는 일련의 프로세스라고 할 수 있습니다. 소프트웨어의 새로운 버전을 릴리즈하는 데에 필요한 모든 워크 프로우, 활동, 자동화 과정이 여기에 포함되며, 이러한 과정을 Jenkins의 Pipeline 파일의 코드로 구현할 수 있는 것입니다.

Jenkins Pipeline 코드를 작성하는 방식에 따라 Declarative PipelineScripted Pipeline으로 나뉩니다.

Declarative Pipeline

Declarative 방식은 Scripted 방식보다 최근에 Jenkins에 추가되었으며, Pipeline 작성에 특화된 문법을 따르기 때문에 코드 작성과 관리가 더욱 용이해졌습니다.

코드 예제

pipeline {
  agent any
  stages {
    stage('Hello World) {
      steps {
        sh 'echo Hello World'
      }
    }
  }
}

장점

  • 보다 구조화된 Pipeline 코드 작성이 가능하여 코드 관리 용이성과 가독성을 높일 수 있습니다.
  • Blue Ocean 인터페이스와 연동하기 쉽습니다.

단점

  • Scripted 방식보다 코드 작성의 자유도가 떨어지고, 복잡한 로직의 Pipeline 코드를 작성하기 어려울 수도 있습니다.
  • Declarative 방식을 지원하지 않는 플러그인도 존재합니다.

Scripted Pipeline

Scripted 방식은 Jenkins가 기존에 지원하던 Pipeline 작성 방식입니다. Groovy 언어가 제공하는 대부분의 기능을 사용할 수 있어 Pipeline 코드를 유연하게 작성 가능합니다.

코드 예제

node {
  stage('Hello World) {
    sh 'echo Hello World'
  }
}

장점

  • Pipeline 코드 작성이 비교적 자유롭습니다.
  • 복잡한 로직의 Pipeline 코드 작성도 가능합니다.

단점

  • 구조화된 양식이 없기 때문에 불안정한 Pipeline 코드를 작성할 위험이 있으며, 코드를 이해하거나 관리하기 어려워질 수도 있습니다.