반응형
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 |