공부
[Jenkins] Freestyle과 Pipeline
samosa
2024. 11. 19. 11:51
Jenkins에서 Freestyle 프로젝트와 Pipeline은 빌드 및 배포 프로세스를 관리하는 두 가지 주요 방법이다. 두 방식은 목적과 사용 용도가 다르며, 각기 다른 수준의 유연성과 자동화를 제공한다. 이를 이해하기 위해 Freestyle 프로젝트와 Pipeline의 차이점을 자세히 살펴보자.
1. Jenkins Freestyle 프로젝트
Freestyle 프로젝트는 Jenkins의 초기 빌드 유형으로, 간단한 빌드 및 배포 작업을 수행하기 위해 사용된다. 주로 GUI 기반으로 설정하며, 기본적인 프로젝트를 자동화하기에 적합하다.
- 설정 및 사용 방식: Freestyle 프로젝트는 Jenkins 웹 UI에서 설정이 이루어진다. 프로젝트를 생성하고, 소스 코드 관리, 빌드 트리거, 빌드 단계, 후속 조치(post-build action) 등을 설정할 수 있다.
- 장점:
- 설정이 비교적 간단하고 직관적이다.
- Jenkins 사용자에게 친숙한 UI를 통해 프로젝트를 구성할 수 있다.
- 단일 또는 소규모 빌드 작업에 적합하다.
- 단점:
- 복잡한 빌드 로직을 구현하기 어렵다.
- 확장성이 제한적이며 코드로 버전 관리가 어렵다.
- 조건부 빌드 및 병렬 작업을 처리하는 데 한계가 있다.
- 주 사용 사례: 단순한 빌드 및 배포 파이프라인, 스크립트 실행, 작은 규모의 CI/CD 작업 등.
2. Jenkins Pipeline 프로젝트
Pipeline 프로젝트는 Jenkins의 강력하고 유연한 빌드 시스템으로, 복잡한 CI/CD 워크플로우를 정의하기 위해 설계되었다. Jenkins Pipeline은 코드로서 파이프라인을 작성할 수 있어 버전 관리와 협업에 유리하다.
- 설정 및 사용 방식: Pipeline은
Jenkinsfile
이라는 파일로 코드화하여 프로젝트의 루트 디렉터리에 저장된다. Declarative 및 Scripted Pipeline 두 가지 구문을 통해 파이프라인을 작성할 수 있다.- Declarative Pipeline: 더 직관적인 구문을 제공하여 파이프라인 작성이 용이하다.
- Scripted Pipeline: Groovy 기반의 프로그래밍으로 보다 유연하고 세부적인 제어가 가능하다.
- 장점:
- 복잡한 빌드 및 배포 로직을 코드화하여 버전 관리가 가능하다.
- 빌드 단계 간 조건부 실행, 병렬 작업 및 다양한 컨트롤 플로우(제어 흐름) 기능을 제공한다.
- 플러그인과의 연계가 자유롭고 높은 유연성을 가진다.
- 단점:
- 설정 및 작성에 학습 곡선이 필요하다.
- 코드 기반이기 때문에, 초보자에게는 Freestyle 프로젝트보다 어려울 수 있다.
- 주 사용 사례: 복잡한 CI/CD 파이프라인, 분기 및 병렬 처리, 컨테이너 기반의 빌드 및 배포 등.
3. 주요 차이점 비교
특징 | Freestyle 프로젝트 | Pipeline 프로젝트 |
---|---|---|
설정 방법 | GUI 기반 설정 | 코드 기반(Jenkinsfile) |
유연성 | 제한적 | 매우 유연함, 복잡한 작업 가능 |
조건부 실행 | 제한적 | 다양한 조건부 실행 지원 |
병렬 처리 | 어렵거나 불가능 | 손쉽게 구현 가능 |
버전 관리 | 어렵다 | Git 등 코드 관리 시스템과 통합 가능 |
사용 용도 | 단순한 빌드 및 배포 작업 | 복잡한 CI/CD 파이프라인 및 다단계 빌드/배포 |
4. 실제 적용 예시
Freestyle 프로젝트 예:
- 소스 코드 관리(SCM) 설정 (예: Git)
- 빌드 트리거 설정 (예: 특정 시간마다 빌드)
- 빌드 단계 추가 (예:
shell script
실행) - 후속 조치 설정 (예: 이메일 알림)
Pipeline 프로젝트 예 (Declarative Pipeline):
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building...'
sh 'make build'
}
}
stage('Test') {
steps {
echo 'Testing...'
sh 'make test'
}
}
stage('Deploy') {
when {
branch 'main'
}
steps {
echo 'Deploying...'
sh 'make deploy'
}
}
}
post {
success {
echo 'Pipeline succeeded!'
}
failure {
echo 'Pipeline failed!'
}
}
}
5. 결론
Freestyle 프로젝트는 빠르고 간단한 빌드 작업에 적합하지만 복잡한 CI/CD 프로세스를 구현하는 데는 한계가 있다. 반면, Pipeline 프로젝트는 코드로 작성되기 때문에 복잡한 워크플로우를 구현하고 확장하기에 적합하다. 조직의 빌드 및 배포 요구 사항이 복잡하고 유연한 자동화가 필요하다면, Pipeline 프로젝트를 사용하는 것이 권장된다.