내 잡다한 노트

Jenkinsfile 이란? 본문

DevOps/Jenkins

Jenkinsfile 이란?

peanutwalnut 2024. 11. 27. 21:22

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 예:

 
pipeline {
         agent any
}
  • any: 어떤 노드에서든 실행 가능.
  • 특정 노드에서 실행하려면:
     
    agent {
          label 'linux'
    }

Scripted 예:

 
node('linux') {
// 해당 노드에서 실행
}

 

 

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