내 잡다한 노트
Jenkinsfile 이란? 본문
Jenkinsfile은 Jenkins 파이프라인을 정의하는 스크립트 파일로, CI/CD 작업(Continuous Integration/Continuous Deployment)을 자동화하기 위한 핵심 구성 파일입니다. Jenkinsfile은 Jenkins가 수행할 빌드, 테스트, 배포 등 여러 작업을 명시적으로 작성한 파일입니다.
Jenkinsfile의 두 가지 스타일
1. Declarative Pipeline (선언형)
- Jenkins Pipeline을 직관적이고 읽기 쉽게 작성할 수 있는 고수준 구문 제공.
- CI/CD 작업 흐름을 pipeline, stages, steps로 구조화.
장점:
- 간결하고, 초보자도 사용하기 쉬움.
- 에러 처리가 자동으로 포함됨.
예:
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building the project...'
sh 'make build'
}
}
stage('Test') {
steps {
echo 'Running tests...'
sh 'make test'
}
}
stage('Deploy') {
steps {
echo 'Deploying the project...'
sh 'make deploy'
}
}
}
}
2. Scripted Pipeline (스크립트형)
- Groovy 기반의 더 유연한 구문 사용.
- 복잡한 논리를 처리하거나 조건부 실행이 필요할 때 유용.
장점:
- 더 세밀한 제어 가능.
- 복잡한 CI/CD 프로세스를 구현할 수 있음.
예:
node {
stage('Build') {
echo 'Building the project...'
sh 'make build'
}
stage('Test') {
echo 'Running tests...'
sh 'make test'
}
stage('Deploy') {
echo 'Deploying the project...'
sh 'make deploy'
}
}
Jenkinsfile의 주요 구성 요소
1. Agent
- Jenkins가 작업을 실행할 **노드(실행 환경)**를 정의.
- 예: Jenkins 마스터 또는 특정 슬레이브 노드에서 실행.
Declarative 예:
- any: 어떤 노드에서든 실행 가능.
- 특정 노드에서 실행하려면:
agent {label 'linux'}
Scripted 예:
2. Stages
- 빌드, 테스트, 배포 등 작업의 단계를 정의.
- 하나의 Pipeline은 여러 단계(Stage)로 구성.
pipeline {
stages {
stage('Build') {
steps {
echo 'Building...'
}
}
stage('Test') {
steps {
echo 'Testing...'
}
}
stage('Deploy') {
steps {
echo 'Deploying...'
}
}
}
}
3. Steps
- 각 Stage에서 실제 수행할 작업을 정의.
- 쉘 명령 실행, 스크립트 호출, 파일 복사 등의 작업 포함.
steps {
sh 'echo Hello, World!'
sh 'python app.py'
}
4. Environment
- Pipeline 실행에 필요한 환경 변수를 설정.
- 프로젝트의 설정값을 외부에서 주입하거나, 공통 변수로 사용할 수 있음.
pipeline {
environment {
PATH = '/usr/local/bin:$PATH'
APP_ENV = 'production'
}
stages {
stage('Print Environment') {
steps {
sh 'echo $APP_ENV'
}
}
}
}
5. Post
- 각 파이프라인 단계(Stage)의 실행 후 수행할 작업 정의.
- 성공(success), 실패(failure), 항상(always) 등 조건에 따라 후처리 작업 설정 가능.
pipeline {
post {
always {
echo 'This runs always.'
}
success {
echo 'Pipeline completed successfully.'
}
failure {
echo 'Pipeline failed.'
}
}
}
6. Triggers
- Pipeline을 자동으로 실행시키는 트리거 정의.
pipeline {
triggers {
cron('H 4 * * 1-5') // 매주 월~금 오전 4시에 실행
}
}
7. Input
- 특정 단계에서 사용자의 입력(승인)을 받는 설정.
pipeline {
stages {
stage('Approval') {
steps {
input message: 'Deploy to production?', ok: 'Yes'
}
}
}
}
8. Tools
- 특정 빌드 도구를 Jenkins에 설치하고 사용.
pipeline {
tools {
maven 'Maven 3.6.0'
jdk 'Java 11'
}
}
'DevOps > Jenkins' 카테고리의 다른 글
Declarative pipeline과 Scripted pipeline의 비교 (0) | 2024.12.13 |
---|---|
Jenkins의 Scripted Pipeline에선 Groovy만 되는건가요? (0) | 2024.11.27 |
Jenkins New item 페이지 (0) | 2024.11.24 |
Jenkins agent (0) | 2024.11.24 |
Groovy 란? (0) | 2024.11.24 |