Theme:

Jenkins 파이프라인을 작성하려면 Groovy를 배워야 하는 걸까요? YAML로도 작성할 수 있다면?

Pipeline as YAML 은 pipeline-as-yaml-plugin을 통해 Jenkins 파이프라인을 Groovy 대신 YAML로 작성할 수 있게 해주는 방식입니다. 진입장벽은 낮지만 플러그인 호환성에 제한이 있으므로, 파이프라인 복잡도에 따라 선택이 달라집니다.

Groovy vs YAML 비교

항목Groovy (기본)YAML (플러그인)
문법Groovy DSLYAML
진입장벽중간 (Groovy 학습 필요)낮음 (YAML만 알면 됨)
가독성보통높음
플러그인 호환성모든 플러그인 지원일부 플러그인만 지원
고급 기능동적 파라미터, 커스텀 스텝 가능제한적
Slack 알림지원미지원 또는 불안정
공식 지원Jenkins 공식커뮤니티 플러그인
실무 권장도높음단순 파이프라인에 적합

설정 방법

1. 플러그인 설치

Manage Jenkins > Plugins > Available Plugins 에서 pipeline-as-yaml-plugin을 검색하여 설치합니다.

2. Pipeline Configure 설정

  1. Pipeline의 Configure 메뉴로 이동합니다.
  2. Build Configuration 섹션에서:
항목설정값
Modeby Jenkinsfile As Yaml
Script Pathjenkins/Jenkinsfile.yaml (YAML 파일 경로)

YAML 파이프라인 작성 예시

기본 문법

YAML
# jenkins/Jenkinsfile.yaml
pipeline:
  agent:
    node:
      label: 'built-in'
  tools:
    jdk: 'OpenJDK17'

  environment:
    SERVICE_NAME: my-service
    SLACK_CHANNEL: '#이슈'
    REMOTE_DIR: credentials('HOME_PATH')
    SERVER_NAME: credentials('DEV_IP')

  stages:
    - stage: Build
      steps:
        - echo "Building ${SERVICE_NAME}..."
        - sh "mvn clean package -DskipTests"

    - stage: Deploy
      steps:
        - echo "Deploying to server..."
        - echo "Remote directory: $REMOTE_DIR"

기본 문법과 더 많은 예시는 공식 YAML Pipeline Syntax 예제에서 확인할 수 있습니다.

동일한 파이프라인의 Groovy 버전 비교

GROOVY
// Jenkinsfile (Groovy)
pipeline {
    agent { node { label 'built-in' } }
    tools { jdk 'OpenJDK17' }

    environment {
        SERVICE_NAME = 'my-service'
        SLACK_CHANNEL = '#이슈'
        REMOTE_DIR = credentials('HOME_PATH')
        SERVER_NAME = credentials('DEV_IP')
    }

    stages {
        stage('Build') {
            steps {
                echo "Building ${SERVICE_NAME}..."
                sh 'mvn clean package -DskipTests'
            }
        }
        stage('Deploy') {
            steps {
                echo "Deploying to server..."
                echo "Remote directory: ${REMOTE_DIR}"
            }
        }
    }
}

실무 사용 후기

장점

  1. ** 낮은 진입장벽:** YAML에 익숙한 개발자라면 즉시 파이프라인을 작성할 수 있습니다.
  2. ** 높은 가독성:** 들여쓰기 기반 구조가 직관적이어서 파이프라인 흐름을 파악하기 쉽습니다.
  3. ** 버전 관리 용이:** YAML 파일의 diff가 깔끔하여 코드 리뷰 시 변경 사항을 쉽게 파악할 수 있습니다.

단점

  1. ** 플러그인 호환성 제한:** 공식 Declarative Pipeline에 비해 지원되는 플러그인 종류가 제한적입니다.
  2. ** 확장 기능 부족:** Slack 알림, 외부 서비스 연동 등의 기능 구현이 어렵거나 지원이 불안정합니다.
  3. ** 고급 기능 제약:** 동적 파라미터, 커스텀 스텝, 조건부 실행 등 복잡한 파이프라인에는 한계가 있습니다.
  4. ** 사전 검증 필요:** 실무에서 필요한 플러그인이 YAML Pipeline에서 정상 동작하는지 반드시 테스트해야 합니다.

실제로 Slack Notification 플러그인을 활용한 빌드 결과 알림 기능이 필요했으나, 해당 플러그인이 YAML Pipeline에서 정상 동작하지 않아 결국 Groovy로 전환했습니다. 단순한 빌드/배포 파이프라인에는 YAML이 적합하지만, 알림/연동 등 확장 기능이 필요하다면 Groovy를 권장합니다.

주의할 점

Slack Notification 플러그인 미지원

YAML Pipeline에서 Slack 알림 플러그인이 정상 동작하지 않는 경우가 많습니다. 빌드 결과 알림이 필요하다면 처음부터 Groovy로 작성하는 것이 안전합니다. YAML로 시작했다가 나중에 Groovy로 전환하면 파이프라인을 처음부터 다시 작성해야 할 수 있습니다.

커뮤니티 플러그인의 업데이트 불확실성

pipeline-as-yaml-plugin은 Jenkins 공식이 아닌 커뮤니티 플러그인입니다. Jenkins 메이저 업데이트 시 호환성이 보장되지 않을 수 있으므로, 프로덕션 환경에서는 사전 검증이 필수입니다.


정리

상황권장 방식
단순 빌드/배포 파이프라인YAML
Slack 알림, 외부 서비스 연동 필요Groovy
조건부 실행, 동적 파라미터 필요Groovy
DevOps 경험이 적은 팀에서 빠른 도입YAML (단, 추후 전환 가능성 고려)
댓글 로딩 중...