320x100
320x100

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

 

Gradle을 위한 Groovy 문법 한 번에 정리하기 : Data Type, String, Closure, Collection, Method, Class

Groovy란? Groovy란 JVM위에서 동작하는 동적 타입 프로그래밍 언어이다. Java뿐만 아니라 Python, Ruby 등에 많은 영향을 받은 프로그래밍 언어로 문법이 간결하다. 하지만, 사실상 대부분 Gradle Script를

kotlinworld.com

 

젠킨스 파이프라인 정리 - 2. Scripted 문법 소개

안녕하세요? 이번 시간에는 젠킨스 파이프라인의 Scripted 문법을 소개드리겠습니다. 지난 시간에 말씀드린 것처럼 Scripted 문법은 쉘 스크립트를 짜듯이 자유롭게 파이프라인을 구성할 수 있도록

jojoldu.tistory.com

300x250
728x90