-
🛠️ Jenkins Pipeline: node vs pipeline 차이점과 Sandbox 오류 해결 방법IT 2025. 5. 22. 12:29반응형
Jenkins에서 파이프라인을 구성하다 보면 두 가지 스타일이 존재한다는 것을 알게 됩니다: Scripted Pipeline과 Declarative Pipeline. 각각 node {}와 pipeline {}으로 시작되는 이 두 방식은 단순히 문법 차이 이상으로, 보안 정책, 확장성, 사용성에 있어 큰 차이를 가집니다.
이번 글에서는 Scripted와 Declarative의 차이점, 그리고 Sandbox 오류 해결 사례를 중심으로 정리해보았습니다.
✅ Scripted vs. Declarative Pipeline 비교
항목 Scripted Pipeline (node) Declarative Pipeline (pipeline) 구조 자유로운 Groovy 문법 엄격한 DSL 기반 문법 학습 난이도 고급자에게 유리 초보자에게 친숙 조건/반복문 자유롭게 가능 (if, for, try-catch) DSL 문법 내 제한적 Jenkins 내부 접근 가능 (Jenkins.instance, rawBuild) 제한됨 (Sandbox 적용) 보안 승인 필요 있음 (사용자 책임) 기본적으로 안전 (관리자 승인 적음) 대표 키워드 node {} pipeline { agent any }
⚠️ 실제 발생한 오류: getRawBuild() Sandbox 차단
Declarative Pipeline에서 다음 코드를 사용했을 때
script { def prevBuild = currentBuild.rawBuild.getPreviousBuild() }
다음과 같은 오류가 발생했습니다:
Scripts not permitted to use method org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper getRawBuild
이것은 Jenkins의 Script Security Plugin이 getRawBuild() 메서드를 Sandbox 외부 접근으로 간주하고 실행을 차단한 것입니다.
🧩 해결 방법
✅ 1. 관리자 승인
- Jenkins 관리자 계정으로 Manage Jenkins → In-process Script Approval 메뉴에서 아래 항목을 수동 승인
- method org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper getRawBuild
✅ 2. Sandbox 해제
Declarative Pipeline에서는 Sandbox 해제를 해도 일부 내부 접근이 차단될 수 있습니다.
이 경우에는 Scripted Pipeline으로 전환하는 것이 확실한 해결책입니다.
✨ Scripted Pipeline 예제 (Sandbox 없이 getRawBuild() 사용)
node { stage('Get Last Build Time') { def prevBuild = currentBuild.rawBuild.getPreviousBuild() if (prevBuild) { def formatted = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(prevBuild.getTime()) echo "📅 이전 실행 시간: ${formatted}" } } }
해당 Job에서 "Use Groovy Sandbox" 체크 해제 필요
💡 결론: 언제 Scripted, 언제 Declarative?
상황 추천 방식 빠르게 구성하는 간단한 파이프라인 Declarative (pipeline {}) Jenkins 내부 객체 직접 제어 Scripted (node {}) 복잡한 로직 (조건, 반복, 예외 처리 등) Scripted 보안 유지 및 팀 협업 Declarative
📌 마무리
Jenkins Pipeline을 구성할 때 형식적인 안정성과 보안이 필요하면 Declarative,
더 높은 유연성과 시스템 수준 접근이 필요하면 Scripted를 사용하는 것이 바람직합니다.
당신의 프로젝트 목적에 따라 적절히 선택하세요!
반응형'IT' 카테고리의 다른 글
MySQL 날짜 조건 검색, BETWEEN과 부등호 차이점 (0) 2025.04.16 MySQL vs MSSQL 개발자가 반드시 알아야 할 결정적 차이점 8가지 (1) 2025.04.02 Docker와 Docker Compose 설치 방법: 초보자도 쉽게 따라 하는 가이드 (4) 2025.03.25 네이버 블로그와 티스토리 블로그에 같은 글 올리기: 장단점과 꿀팁 (7) 2025.03.17