본문 바로가기

DevOps/CI & CD

젠킨스 파이프라인 문법(Pipeline Syntax) 총정리

 

젠킨스 파이프라인을 구성하기 위해서는 파이프라인 문법을 작성하는게 중요하다. 단순히 groovy에 대한 문법 뿐만아니라 jenkins에서 사용가능한 준비된 function들(혹은 block들)을 잘 익히고 사용하는 것이 매우 중요하다!(ex. timeout)

 

[개발이야기/Jenkins] - Jenkins Pipeline 개요 및 파이프라인 스크립트 예제 에서 간단한 파이프라인에 대한 개요를 확인 할 수 있다.

 

파이프라인 선언

파이프라인 선언은 간단하게 아래와 같은 block으로 이루어 진다. 모든 파이프라인은 반드시 pipeline block으로 감싸져야 한다. 파이프라인 안쪽의 statement, expression은 groovy 언어를 따른다.

pipeline {
    /* insert Declarative Pipeline here */
}
 

 

 

  • 파이프라인의 top level은 반드시 pipeline {} block 으로 이루어져야 한다.
  • 세미콜론은 없음
 

섹션(Sections)

섹션은 파이프라인에서 하나이상의 스텝(Steps)이나 지시(Directives)로 이루어져 있다.

    • agent : agent를 선택할 경우, 젠킨스 environment가 해당 agent로 설정된다.

 필수여부 

 필수

 파라미터

  • any : 사용가능한 agent
  • none : global agent는 설정되지 않음. 대신 각 stage에 설정 필요
  • label : 특정 label 명으로 된 environment로 설정
  • node : label과 유사
  • docker : 특정 도커 이미지로 수행
  • dockerfile : 도커 파일 기반으로 수행

 위치

  • pipeline top level(필수)
  • stage block(선택)

 

    • post : 특정 스테이지 이전 혹은 이후에 실행될 condition block

 필수여부 

 선택

 파라미터

  • always : 실행 끝나고나서 실행되는 step
  • changed : previous run과 다른 status이면 실행되는 step
  • failure : 실패하면 실행되는 step
  • success : 성공하면 실행되는 step
  • unstable : test fail, code violation 등일때 실행되는 step
  • aborted : 강제로 중지됬을 때 실행되는 step

 위치

  • pipeline top level(선택)
  • stage block(선택)
pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
    post { 
        always { 
            echo 'I will always say Hello again!'
        }
    }
}
 
    • stages : 스테이지의 모음

 필수여부 

 필수

 위치

  • pipeline block에서 단 한번

 

pipeline {
    agent any
    stages { 
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
}​

 

    • steps : stage 내부 block에서 여러번 호출 될 수 있는 block

 필수여부 

 필수

 위치

  • 각 stage block에서 여러번

 

Directives(파이프라인 configure)

    • environment : key-value style로 파이프라인 내부에서 사용할 변수로 선언 가능하다.

 필수여부 

 선택

 위치

  • 파이프라인 혹은 스테이지 블락 내부
pipeline {
    agent any
    environment { 
        CC = 'clang'
    }
    stages {
        stage('Example') {
            environment { 
                AN_ACCESS_KEY = credentials('my-prefined-secret-text') 
            }
            steps {
                sh 'printenv'
            }
        }
    }
}
 

 

    • options : pipeline의 옵션을 선택적으로 집어 넣을 수 있다.

 필수여부 

 선택

 위치

  • 파이프라인 블락 안쪽 단 한번
    • Available Options
      • buildDiscarder
        - Persist artifacts and console output for the specific number of recent Pipeline runs
      • disableConcurrentBuilds
        - Disallow concurrent executions of the Pipeline. Can be useful for preventing simultaneous accesses to shared resources, etc
      • overrideIndexTriggers
        - Allows overriding default treatment of branch indexing triggers
      • skipDefaultCheckout
        - Skip checking out code from source control by default in the agent directive
      • skipStagesAfterUnstable
        - Skip stages once the build status has gone to UNSTABLE
      • checkoutToSubdirectory
        - Perform the automatic source control checkout in a subdirectory of the workspace
      • timeout
        - Set a timeout period for the Pipeline run, after which Jenkins should abort the Pipeline
      • retry
        - On failure, retry the entire Pipeline the specified number of times
      • timestamps
        - Prepend all console output generated by the Pipeline run with the time at which the line was emitted
pipeline {
    agent any
    options {
        timeout(time: 1, unit: 'HOURS') 
    }
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
}
    • parameters : 유저로부터 트리거링 받은 변수들에 대해서 선언할 수 있다.

 필수여부 

 선택

 위치

  • 파이프라인 블락 안쪽 단 한번
    • String
      - A parameter of a string type, for example: parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }
    • booleanParam
      - A boolean parameter, for example: parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') }  
  • triggers : cront, pollSCM, upstream 등 여러방식으로 트리거를 구성할 수 있다.
    ex. 새벽 3시마다 빌드하기