Pipeline을 사용하기 위해서는 프로젝트 저장소(git, svn 등)의 JenkinsFile
이 작성되어야 한다. 이 JenkinsFile
이 작성되기 위해 선언형 Pipeline 구문
과 스크립트형 Pipeline 구문
2가지를 사용할 수 있다.
선언형 Pipeline 구문
이 스크립트형 Pipeline 구문
보다 최근에 더 많이 사용되는 방법 이라고 한다.
Jenkins 파이프라인은 JenkinsFile
이라는 텍스트 파일을 사용하여 파이프라인을 실행하는 데 필요한 단계를 정의할수있다.
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}"'
}
}
선언형 파이프라인 구문과 스크립트형 파이프라인 구문에 대해 알아보자
선언형 파이프라인 구문
선언형 파이프라인 구문 예시
// 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 단계와 관련된 몇가지 작업 수행
}
}
}
}
스크립트형 파이프라인 구문
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 단계와 관련된 몇가지 작업 수행
}
}
선언형 파이프라인을 이용해서 JenkinsFile
을 작성하기 위한 문법에 대해 알아보자.
선언형 파이프라인 구문 문법은 Groovy
구문과 동일한 규칙을 따르지만 몇 가지 예외 사항이 있다.
pipeline { }
으로 해야한다.;
이 없다.sections
, directives
, steps
등 할당문으로 구성되어야 한다.input()
각 옵션에 대한 자세한 정보는 아래 문서를 참고하자
jenkins - pipeline syntax
sections
는 directives
와 steps
를 1개 이상 포함하는 코드로 구성되어 있다.agent
, post
, stages
, steps
pipeline
또는 stage
에서 조건부로 사용할 수 있는 하나의 구간이다.any
, none
, label
, docker
, kubernetes
가 있다.pipeline
또는 stage
에서 조건부로 사용할 수 있는 하나의 구간이다.always
, changed
, fixed
, regression
, aborted
, failure
, success
, unstable
, unsuccessful
, cleanup
가 있다.pipeline
또는 stage
에서 조건부로 사용할 수 있는 하나의 구간이다.stage
를 포함한다.stage
안에는 여러개의 step
이 포함될 수 있다.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}"
}
}
}
}
}
}
}