[ Jenkins ] Jenkins Pipeline 구문

duck-ach·2024년 3월 12일
0

DevOps

목록 보기
7/7


🥸 Jenkins Pipeline 구문

JenkinsFile과 Pipeline 구문

Pipeline을 사용하기 위해서는 프로젝트 저장소(git, svn 등)의 JenkinsFile이 작성되어야 한다. 이 JenkinsFile 이 작성되기 위해 선언형 Pipeline 구문스크립트형 Pipeline 구문 2가지를 사용할 수 있다.

선언형 Pipeline 구문스크립트형 Pipeline 구문보다 최근에 더 많이 사용되는 방법 이라고 한다.

JenkinsFile

Jenkins 파이프라인은 JenkinsFile 이라는 텍스트 파일을 사용하여 파이프라인을 실행하는 데 필요한 단계를 정의할수있다.

Pipeline 구문

  • JenkinsFile을 정의하는 데 사용되는 파이프라인 구문은 선언적 파이프라인 구문스크립트 파이프라인 구문 두 가지로 나뉜다. (서로 호환 X)
  • 이 두 파이프라인은 모두 Groovy DSL을 기반으로 하지만 스크립트 파이프라인은 조금 더 전통적인 파이프라인이기 때문에 조금 더 엄격한 Groovy 기반 구문을 사용한다.

Pipeline 주요 항목

  • pipeline
  • node
  • stage
  • step

pipeline

  • pipeline 항목은 애플리케이션의 빌드, 테스트 및 배포 단계를 포함하는 전체 빌드 프로세스를 정의한다.
  • pipeline의 블록은 선언형 파이프라인 구문의 핵심 부분이다.
  • JenkinsFile의 시작지점에 선언해야 한다.
pipeline { /* 내용 */ }

node

  • node 항목은 스크립트형 파이프라인 구문의 핵심 부분이다.
  • JenkinsFile의 시작 지점에 선언해야 한다.
node { /* 내용 */ }

stage

  • stage 항목은 전체 파이프라인 단계를 통해 수행되는 작업의 하위 집합을 나타낸다. (ex. jenkins를 통해 테스트 -> 빌드 -> 배포 -> 서버 재시작을 수행해야 한다고 가정했을 때 테스트, 빌드, 배포, 서버재시작이 각각 하나의 stage가 된다.)
  • stages 항목은 하나 이상의 stage 모음을 정의한다.
  • 전체 파이프라인의 흐름에서 특정한 시점에 실행이 필요한 것들을 묶을 수 있다.
stage('build-application-test') {
	steps {
    	echo 'Build Start "${TEST_ADMIN}"'
    	sh './gradlew --gradle-user-home ${GRADLE_HOME} ${TEST_ADMIN}:clea ${TEST_ADMIN}:build -x test'
    	echo 'Build End "${TEST_ADMIN}"'
	}
}

step

  • step 항목은 stage 내에서 해야 할 단일 작업을 나타내며, 특정 시점에서 수행할 작업을 알려준다.
stage('build-application-test') {
	steps {
    	echo 'Build Start "${TEST_ADMIN}"'
    	sh './gradlew --gradle-user-home ${GRADLE_HOME} ${TEST_ADMIN}:clea ${TEST_ADMIN}:build -x test'
    	echo 'Build End "${TEST_ADMIN}"'
	}
}

Pipeline 구문 종류

선언형 파이프라인 구문과 스크립트형 파이프라인 구문에 대해 알아보자

선언형 파이프라인 구문

  • 파이프라인 코드를 더 쉽게 읽고 쓸 수 있다.
  • 이 코드는 git과 같은 소스 제어 관리 시스템에 체크인 할 수 있는 JenkinsFile로 작성된다.

선언형 파이프라인 구문 예시

// Jenkinsfile (Declarative Pipeline)
pipeline {
    agent any // 사용 가능한 agent 에서 이 pipeline 또는 해당 stages를 수행
    stages {
        stage('Build') { // build 단계 정의
            steps {
                echo 'building' // build 단계와 관련된 몇가지 작업 수행
            }
        }
        stage('Test') { // test 단계 정의
            steps {
                echo 'testing' // test 단계와 관련된 몇가지 작업 수행
            }
        }
        stage('Deploy') { // deploy 단계 정의
            steps {
                echo 'deploying' //  deploy 단계와 관련된 몇가지 작업 수행
            }
        }
    }
}

스크립트형 파이프라인 구문

  • 선언적 파이프라인 구문보다는 전통적인 방법이다.
  • 스크립트 파이프라인 구문에서 JenkinsFile은 Jenkins UI 인스턴스에 작성된다.
  • 여기서 stage 블록은 script pipeline 구문에서 선택사항이다. 하지만 stage 블록을 구현하면 Jenkins UI에서 각 작업/단계의 하위 집합을 더 명확하게 시각화 할 수 있다.

스크립트형 파이프라인 구문 예시

// Jenkinsfile (Scripted Pipeline)
node {  // 사용 가능한 agent 에서 이 pipeline 또는 해당 stages를 수행
    stage('Build') { // build 단계를 정의
        echo 'building'// build 단계와 관련된 몇가지 작업 수행
    }
    stage('Test') { // test 단계를 정의
        echo 'testing'// test 단계와 관련된 몇가지 작업 수행
    }
    stage('Deploy') { // deploy 단계를 정의
        echo 'deploying'// deploy 단계와 관련된 몇가지 작업 수행 
    }
}

🥸 선언형 파이프라인(Declarative Pipeline) 구문 문법

선언형 파이프라인을 이용해서 JenkinsFile을 작성하기 위한 문법에 대해 알아보자.

선언형 파이프라인 구문 문법은 Groovy 구문과 동일한 규칙을 따르지만 몇 가지 예외 사항이 있다.

  • 시작은 pipeline { } 으로 해야한다.
  • 명령문 구분 기호로 세미콜론; 이 없다.
  • 블록은 sections, directives, steps 등 할당문으로 구성되어야 한다.
  • 속성 참조문은 인자값이 없다. input()

각 옵션에 대한 자세한 정보는 아래 문서를 참고하자
jenkins - pipeline syntax

sections

  • sectionsdirectivessteps 를 1개 이상 포함하는 코드로 구성되어 있다.
  • sections에 포함된 항목 : agent, post, stages, steps

agent

  • pipeline 또는 stage 에서 조건부로 사용할 수 있는 하나의 구간이다.
  • 옵션에는 any, none, label, docker, kubernetes 가 있다.

post

  • pipeline 또는 stage 에서 조건부로 사용할 수 있는 하나의 구간이다.
  • Job의 빌드 이후 처리 동작에 대해 상세 설정을 할 수 있다.
  • 옵션에는 always, changed, fixed, regression, aborted, failure, success, unstable, unsuccessful, cleanup가 있다.

stages

  • pipeline 또는 stage 에서 조건부로 사용할 수 있는 하나의 구간이다.
  • 하나 이상의 stage를 포함한다.
  • stage 안에는 여러개의 step이 포함될 수 있다.

steps

  • pipeline 또는 stage에서 조건부로 사용할 수 있는 하나의 구간이다.
  • 지정된 stage 에서 하나 이상의 step을 정의한다.
  • 단일 작업을 나타낸다.

선언형 파이프라인 예시 1

pipeline {
	agent any
    stages {
    	stage('Example') {
        	steps {
            	echo 'Hello World'
                sh ''
            }         
        }     
    }     
    post {
    	always {
        	echo 'I say always Hello, after perform stages!!'
        }     
   	} 
}

선언형 파이프라인 예시 2 - 출처 Jenkins Document

pipeline {
    parameters {
        choice(name: 'PLATFORM_FILTER', choices: ['all', 'linux', 'windows', 'mac'], description: 'Run on specific platform')
    }
    agent none
    stages {
        stage('BuildAndTest') {
            matrix {
                agent {
                    label "${PLATFORM}-agent"
                }
                when { anyOf {
                    expression { params.PLATFORM_FILTER == 'all' }
                    expression { params.PLATFORM_FILTER == env.PLATFORM }
                } }
                axes {
                    axis {
                        name 'PLATFORM'
                        values 'linux', 'windows', 'mac'
                    }
                    axis {
                        name 'BROWSER'
                        values 'firefox', 'chrome', 'safari', 'edge'
                    }
                }
                excludes {
                    exclude {
                        axis {
                            name 'PLATFORM'
                            values 'linux'
                        }
                        axis {
                            name 'BROWSER'
                            values 'safari'
                        }
                    }
                    exclude {
                        axis {
                            name 'PLATFORM'
                            notValues 'windows'
                        }
                        axis {
                            name 'BROWSER'
                            values 'edge'
                        }
                    }
                }
                stages {
                    stage('Build') {
                        steps {
                            echo "Do Build for ${PLATFORM} - ${BROWSER}"
                        }
                    }
                    stage('Test') {
                        steps {
                            echo "Do Test for ${PLATFORM} - ${BROWSER}"
                        }
                    }
                }
            }
        }
    }
}
profile
자몽 허니 블랙티와 아메리카노 사이 그 어딘가

0개의 댓글