Scripted 문법
: Groovy 문법을 사용하며 자유롭게 파이프라인을 구성할 수 있도록 지원하는 문법
Groovy
: JVM 위에서 동작하는 동적 타입 프로그래밍 언어
: Java 뿐만 아니라 Python, Ruby 등의 언어에 많은 영향을 받은 프로그래밍 언어로 문법이 간결함
: 대부분 Gradle Script 작성을 위해 많이 사용
: 최근에는 Gradle Groovy 대신 Gradle Kotlin으로 많이 전환하고 있는 추세
> 빌드 스크립트를 작성하기 위해 별도의 언어를 배워야 한다는 부담 때문
- 데이터타입
: 별도의 타입을 구체적으로 정의할 필요가 없음
> def로 선언하면 컴파일러가 타입을 추론함
class MyGroovy {
static void main(String[] args){
def kotlinWorldDef : string = "2mukee World"
String kotlinWorldString = "comjeongca"
}
}
- 여러 줄의 문자열
class MyGroovy {
static void main(String[] args){
def kotlinWorldDef : string =
"""
hello i'm 2mukee
manager of Comjeongca
"""
println(kotlinWorldDef)
}
}
: "${변수}" 를 통해 string 치환도 가능
- 패턴비교
class MyGroovy {
static void main(String[] args){
def kotlinWorldDef : string = "tlgns7386@gmail.com"
def emailPattern = /([.]+)@([.]+)/
println(kotlinWorldDef ==~ emailPattern)
}
}
- Groovy Closure (lambda)
class MyGroovy {
static void main(String[] args){
def kotlinWorldDef : { number →
println(number)
}
// 10
closure(10)
}
: number = 5 → 와 같이 default 값이 설정되어 있으면 인자를 넘기지 않아도 된다
- 컬렉션
class MyGroovy {
static void main(String[] args){
def array1 = [1,2,3]
}
}
class MyGroovy {
static void main(String[] args){
def set1 = [1,2,3].toSet()
}
}
class MyGroovy {
static void main(String[] args){
def map1 = [blogName: "2mukee", number: 2]
map["blogName"]
map.blogName
map.get("blogName")
}
}
- 메서드
class MyGroovy {
static void main(String[] args){
def result = add 1,3
// 4
println(result)
}
}
static int add(int x, int y) {
x+y
}
- 클래스
class blog {
def blogName, url
}
class MyGroovy {
static void main(String[] args){
def blog1 = new Blog(blogName: "2mukee", url: "2mukee.tistory.com")
print blog1.blogName
}
}
Scripted 문법의 장점과 단점
- 장점
: 더 많은 정차적인 코드를 작성 가능
: 프로그램 작성과 흡사
: 기존 파이프라인 문법이기 때문에 이전 버전과 호환 가능
: 필요한 경우 커스텀한 작업 생성이 가능하여 높은 유연성을 가짐
: 보다 복잡한 워크 플로우 및 파이프라인 모델링 가능
- 단점
: 일반적으로 더 많은 프로그래밍 필요
: Groovy 언어 및 환경으로 제한된 구문 검사
: 전통적인 젠킨스 모델과는 맞지 않음
: 같은 작업이라면 Declarative 문법보다 잠재적으로 더 복잡
문법
: 별도의 기능을 지원하는 Directive가 존재
※ Directive
- node
: Scripted 파이프라인을 실행하는 젠킨스 에이전트 (최상단 선언 필요)
: 젠킨스 마스터 슬레이브 구조에서는 파라미터로 마스터-슬레이브 사용 가능
- dir
: 명령을 수행할 디렉터리 root 폴더 정의
- stage
: 파이프라인의 각 단계를 의미
: 어떤 작업을 실행할지 선언하는 작업의 본문
- git
: Git 원격 저장소에서 프로젝트 clone
- sh
: Unix 환경에서 실행할 명령어 실행
: 윈도에서는 bat
- def
: 변수 혹은 함수 선언 지시자
※ 예시
node('worker') {
stage('Build') {
// 스테이지에서 수행할 코드 작성
}
}
node {
def hello = 'Hello jojoldu' // 변수선언
stage ('clone') {
git 'https://github.com/jojoldu/jenkins-pipeline.git' // git clone
}
dir ('sample') { // clone 받은 프로젝트 안의 sample 디렉토리에서 stage 실행
stage ('sample/execute') {
sh './execute.sh'
}
}
stage ('print') {
print(hello) // 함수 + 변수 사용
}
}
// 함수 선언 (반환 타입이 없기 때문에 void로 선언, 있다면 def로 선언하면 됨)
void print(message) {
echo "${message}"
}
Node와 Stage의 관계
예외처리
node {
stage('Example') {
try {
sh 'exit 1'
}
catch (exc) {
echo 'Something failed, I should sound the klaxons!'
throw
}
}
}
Refference
'CICD > Jenkins' 카테고리의 다른 글
젠킨스 remote: Support for password authentication was removed on August 13, 2021 해결 방법 (0) | 2022.07.26 |
---|---|
젠킨스 파이프라인 기초 - 2 (파이프라인 샘플 만들기) (0) | 2022.07.23 |
젠킨스 파이프라인 기초 - 1 (파이프라인의 개념과 DSL) (0) | 2022.07.23 |
젠킨스 버전 업데이트 방법 (우분투) (0) | 2022.07.10 |
WSL2 환경에서 Jenkins 플러그인 업데이트 안될 때 (0) | 2022.05.19 |