반응형

Jenkinsfile 프로젝트 구성

  • 아래 코드들 추가 후 git repository의 master 브랜치에 푸시

JsonUtils.groovy

  • 경로 : <프로젝트> /src/JsonUtils.groovy
@Grapes(
    @Grab(group='com.fasterxml.jackson.core', module='jackson-databind', version='2.10.2')
)

import com.fasterxml.jackson.core.util.DefaultIndenter
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter
import com.fasterxml.jackson.databind.ObjectMapper
import groovy.json.JsonSlurper

class JsonUtils {
    static String toJson(Object object) {
        ObjectMapper mapper = new ObjectMapper()
        DefaultIndenter indenter = new DefaultIndenter("    ", DefaultIndenter.SYS_LF)

        DefaultPrettyPrinter printer = new DefaultPrettyPrinter()
        printer._objectFieldValueSeparatorWithSpaces = ": "
        printer._arrayIndenter = indenter
        printer._objectIndenter = indenter

        return mapper.writer(printer).writeValueAsString(object)
    }

    static Object parse(String text) {
        return new JsonSlurper().parseText(text)
    }
}

calc.groovy

  • 경로 : <프로젝트> /vars/calc.groovy
def add(a, b) {
    return a + b
}

def sub(a, b) {
    return a - b
}

consts.groovy

  • 경로 : <프로젝트> /vars/consts.groovy
import groovy.transform.Field

@Field final String API_URL = "https://api.example.com"

request.groovy

  • 경로 : <프로젝트> /vars/request.groovy
@Grapes(
    @Grab(group = 'org.apache.httpcomponents', module = 'httpclient', version = '4.5.11')
)

import org.apache.http.Header
import org.apache.http.client.methods.CloseableHttpResponse
import org.apache.http.client.methods.HttpUriRequest
import org.apache.http.client.methods.RequestBuilder
import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.CloseableHttpClient
import org.apache.http.impl.client.HttpClients
import org.apache.http.message.BasicHeader
import org.apache.http.util.EntityUtils

import java.nio.charset.StandardCharsets

def call(params) {
    List<Header> headers = params.headers ? params.headers.collect { key, value ->
        new BasicHeader(key, value)
    } : []

    CloseableHttpClient client = HttpClients
        .custom()
        .setDefaultHeaders(headers)
        .build()

    HttpUriRequest request = RequestBuilder
        .create(params.method)
        .setUri(params.url)
        .setEntity(params.body ? new StringEntity(params.body, StandardCharsets.UTF_8) : null)
        .build()

    CloseableHttpResponse response = client.execute(request)

    int statusCode = response.getStatusLine().getStatusCode()
    String data = EntityUtils.toString(response.getEntity())

    return [
        statusCode: statusCode,
        data: data
    ]
}

example.groovy

  • 경로 : <프로젝트> /example.groovy
@Library("commons") _

pipeline {
    agent any

    stages {
        stage("test") {
            steps {
                script {
                    println consts.API_URL
                    println calc.add(1, 2)
                    println calc.sub(1, 2)
                    println request(method: "GET", url: "https://google.com")
                    println JsonUtils.toJson([message: "Hello World"])
                }
            }
        }
    }
}

Jenkins 설정

시스템 설정

  • Jenkins 관리 > 시스템 설정 > Global Pipeline Libraries
  • Name : commons
  • Default version : master
  • Load implicitly : 체크
  • Allow default version to be overriden : 체크
  • Include @Library changes in job recent changes : 체크
  • Modern SCM : 체크
  • Git : 체크
  • Project Repository : Jenkinsfile 프로젝트 repository url 입력
  • Credentials : SSH 접근 계정
  • 저장

빌드 설정

  • 빌드 구성 > Pipeline
  • Definition : Pipeline script from SCM
  • SCM : Git
  • Repository URL : Jenkinsfile 프로젝트 repository url 입력
  • Credentials : SSH 접근 계정
  • Branches to build : */master
  • Script Path : example.groovy
  • 저장

마무리

주의사항

  • File, IO 관련 자바 라이브러리를 사용하면 jenkins approval script 정책에 의해 실행되지 않음
  • 사용할 코드를 approval script에 명시하면 사용은 가능하나 일일이 찾아 넣어야되므로 관리가 어렵고 비권장됨
  • File, IO 관련 처리 코드는 Pipeline Step Utility나 쉘 스크립트로 처리할 것을 권장

참고

반응형

'Development > Jenkins' 카테고리의 다른 글

[Jenkins] Ansible 연동  (0) 2020.12.28
[Jenkins] Jenkins Pipeline  (0) 2020.12.28
[Jenkins] Selenium 테스트 설정  (0) 2019.11.24
[Jenkins] Publish Over SSH 설정  (0) 2019.05.01
[Jenkins] npm 빌드 설정  (0) 2019.04.30

+ Recent posts