단순 예제임.
사용법 없음..ㅋ
Jenkins -> item추가 -> Pipeline 으로 프로젝트 생성하고
Gitlab Integration에서 push event에 대한 WebHook을 jenkins으로 걸어놓고
Jenkins에서는 해당 이벤트를 받으면 gradle build -> Docker 이미지 생성 -> Docker Registry에 배포 -> 결과 전송 (Jandi Webhook)
이런 구조임..
프로젝트 git에는 docker폴더에 Dockerfile이 있어야 함.
import groovy.json.JsonOutput
version = ""
imageName = ""
def sendMessage(title, data) {
def post = new URL("JANDI Web Hook URL").openConnection();
data.body = "[[${env.JOB_NAME}]](${env.RUN_DISPLAY_URL}) push by ${env.gitlabUserName}: ${title}"
post.setRequestMethod("POST")
post.setDoOutput(true)
post.setRequestProperty("Accept", "application/vnd.tosslab.jandi-v2+json")
post.setRequestProperty("Content-Type", "application/json")
post.getOutputStream().write(JsonOutput.toJson(data).getBytes("UTF-8"));
def postRC = post.getResponseCode();
return postRC
}
node('linux-agent-1') {
try {
stage('Preparation') {
sendMessage("start build", [:])
git(
url: env.gitlabSourceRepoURL,
credentialsId: 'gitlab-jenkins-1',
branch: env.gitlabTargetBranch
)
}
stage('Build') {
// 아래는 Artifactory 필요한 경우
withCredentials([usernamePassword(credentialsId: 'artifactory-jenkins-pipeline', usernameVariable: 'ARTIFACTORY_USERNAME', passwordVariable: 'ARTIFACTORY_PASSWORD')]) {
sh 'chmod +x gradlew'
sh 'rm -rf build/libs/'
sh './gradlew bootJar'
}
}
stage('Publish') {
version = sh(returnStdout: true, script: 'find build/libs/*.jar | sed -r \'s/^.*-([0-9.]+)\\.jar$/\\1/\'').trim()
imageName = "Docker Registry 주소/네임스페이스/${env.JOB_NAME}:${env.gitlabTargetBranch.substring(7)}-${version}"
sh 'cp build/libs/*.jar ./docker/app.jar'
withDockerRegistry([url: "Docker Registry 주소"]) {
def buildedDockerImage = docker.build(imageName, "./docker/")
buildedDockerImage.push()
}
}
stage('Results') {
def data = [
"connectColor": "#FAC11B",
"connectInfo": [
[
"title": "version",
"description": version
],
[
"title": "published image",
"description": imageName
]
]
]
sendMessage("build success", data)
}
}catch(Exception e){
def data = [
"connectColor": "#FAC11B",
"connectInfo": [
[
"title": "version",
"description": version
],
[
"title": "Exception",
"description": e.getMessage()
]
]
]
sendMessage("build failed. [[Click]](${env.BUILD_URL}/console) to see more information.", data)
throw e
}
}
반응형
'개발 및 운영' 카테고리의 다른 글
자체 메일서버에서 보내는 메일이 스팸으로 갈 때.. (0) | 2019.08.29 |
---|---|
JCE Provider 개발하기 - JCE Code Signing 인증서 요청 (1) | 2019.08.07 |
EJBCA SSL인증서 갱신(재발급) (0) | 2019.07.10 |
haproxy transparent 설정 (0) | 2019.07.09 |
sslh & openvpn connection-reset 문제 (0) | 2019.07.09 |
댓글