Scripted 파이프라인 구문
Scripted 파이프라인은 범용 사용성을 위해 Groovy 문법을 준수하는 DSL로 작성됩니다. 따라서 Groovy 언어에서 사용 가능한 대부분의 구문을 스크립트에서 그대로 사용 할 수 있습니다.
흐름 제어
Groovy 또는 다른 언어의 실행 방식과 마찬가지로 Jenkinsfile의 맨 위에서부터 아래로 순차 실행됩니다. 따라서 스크립트의 흐름을 제어하려면 다음과 같은 구문(e.g. 조건문)에 의존합니다.
node {
stage('Example') {
if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}
}
}
또 다른 방법은 예외 처리 구문을 사용하는 것입니다. 어떤 이유에서 Steps가 실패하면 예외가 발생합니다. 예외 처리를 위해서는 try-catch-finally 구문을 사용합니다.
node {
stage('Example') {
try {
sh 'exit 1'
}
catch (error) {
echo 'Something failed, I should sound the klaxons!'
throw error
}
}
}
Node
Node는 Jenkins의 분산 처리 아키텍처의 일부로서, 작업 수행에 따른 부하를 다른 여러 개의 에이전트 노드(Agent Node)에 전가 할 수 있습니다.
- Master Node
마스터 노드는 사용자 환경에서의 모든 작업을 처리합니다. - Agent Node
에이전트 노드는 마스터 노드로부터 전가 받은 특정 노드 블록의 작업을 수행합니다.
Jenkinsfile에서 첫 번째로 정의되는 Node 블록은 다음과 같이 node 키워드로 시작합니다. 이어서 작성되는 내용은 Node 블록 안에 포함됩니다.
node {
}
만약 Jenkins가 Master-Slave로 구성되어 있다면 node 키워드의 인자로 master 또는 slave를 지정 할 수 있습니다. 인자가 생략되어 있다면 자동으로 master로 처리되며, Jenkins가 단일 머신으로 구성되어 있다면 마찬가지로 인자를 생략해도 무관합니다.
node('master') {
}
Steps/Stage
steps는 Jenkins가 실질적으로 처리해야하는 어떤 작업에 대한 단계를 정의합니다. 다음은 Declarative 파이프라인에서 steps 키워드를 사용하는 예시입니다.
pipeline {
agent any
stages {
stage('Build') {
steps {
}
}
stage ('Test') {
steps {
}
}
}
}
Declarative 파이프라인과 달리 Scripted 파이프라인에서는 steps 키워드를 사용하지 않습니다. 대신 stage 키워드를 나열하여 Jenkins가 처리해야 하는 작업의 단계를 결정합니다.
node {
stage ('Build') {
}
stage ('Test') {
}
}
stages 키워드는 하나의 Stage 블록을 구현합니다. 각각의 Stage 블록은 파이프라인에서 수행해야 할 단계별 작업을 그룹화합니다. 일반적인 파이프라인에서는 다음 작업 그룹들을 개별 Stage 블록에서 구현합니다.
- 깃 리포지토리에서 소스 코드를 Pull
- 소스 코드를 빌드
- 배포 전 테스트 수행
- 애플리케이션 배포 등
def
def 키워드를 사용하여 변수 또는 함수를 정의 할 수 있습니다. 변수를 정의하려면 다음과 같이 작성합니다.
def var = 1000;
node {
stage("Test") {
echo "${var}"
}
}
예시의 실행 결과는 다음과 같습니다.
1000
변수는 블록 내 또는 다른 블록에서 재정의 될 수 있습니다.
def var = 1000;
node {
stage("Test") {
var = 1234;
echo "${var}"
}
}
만약 함수를 정의하려면 다음과 같이 작성합니다. 함수는 파라미터 및 리턴을 사용 할 수 있습니다.
def func(param1) {
return param1 + " with function"
}
node {
stage("Test") {
echo func("the comments will be shown")
}
}
예시의 실행 결과는 다음과 같습니다.
the comments will be shown with function
sh/bat
sh 키워드를 사용하여 CLI 명령을 지정합니다(젠킨스가 Windos에서 동작 중이라면 bat 키워드를 사용합니다).
node {
stage("Test") {
sh "pwd"
}
}
예시의 실행 결과는 다음과 같습니다. CLI 명령과 표준 출력 결과가 Console Output에 나타납니다.
+ pwd
/var/jenkins_home/workspace/Example-Pipeline
dir
작업이 수행되는 디렉토리 경로를 지정합니다. 상대 경로를 사용 할 수 있습니다.
node {
stage("Test") {
dir ('/var/jenkins_home/workspace') {
sh "ls -l"
}
}
}
예시의 실행 결과는 다음과 같습니다.
Running in /var/jenkins_home/workspace
+ ls -l
total 8
drwxr-xr-x 2 jenkins jenkins 4096 Apr 12 06:48 Example-Pipeline
drwxr-xr-x 2 jenkins jenkins 4096 Apr 12 07:36 Example-Pipeline@tmp
'Build > Jenkins' 카테고리의 다른 글
[Infrastructure/Jenkins] SSH Pipeline Steps 플러그인을 사용한 원격 호스트 제어 (0) | 2022.04.12 |
---|---|
[Infrastructure/Jenkins] 플러그인(Plugin) 설치 (0) | 2022.04.12 |
[Infrastructure/Jenkins] 파이프라인 소개 및 젠킨스 웹 UI로 파이프라인 만들기 (0) | 2022.04.11 |
[Infrastructure/Jenkins] MacOS에서 도커(Docker)를 사용한 젠킨스 설치 (0) | 2022.04.06 |
[Infrastructure/Jenkins] 젠킨스(Jenkins)란? (0) | 2022.04.06 |