-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathJenkinsfile
More file actions
153 lines (126 loc) · 5.71 KB
/
Jenkinsfile
File metadata and controls
153 lines (126 loc) · 5.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
pipeline {
agent any
environment {
DOCKER_IMAGE_NAME = 'study-pal:latest'
DOCKER_IMAGE_FILE = 'study-pal.tar.gz'
// Config‑file‑management 플러그인에 등록한 파일 ID
ENV_FILE_ID = 'env-file'
}
stages {
/* 1) 환경 변수 로드 ---------------------------------------------- */
stage('Init Env') {
steps {
configFileProvider([configFile(fileId: ENV_FILE_ID, variable: 'ENV_SRC')]) {
script {
// 1) 워크스페이스에 .env 파일로 복사
sh 'cp "$ENV_SRC" "$WORKSPACE/.env"'
// 2) 전역 변수로 경로 보존
env.ENV_FILE_PATH = "$WORKSPACE/.env"
// 3) 프로퍼티 로드 → env 주입
readProperties(file: env.ENV_FILE_PATH).each { k, v ->
env."$k" = v
}
}
}
}
}
/* 2) Git 체크아웃 -------------------------------------------------- */
stage('CheckOut') { steps { checkout scm } }
/* 3 + 4) 테스트 와 빌드 --------------------------------------------- */
stage('Build') {
steps {
sh 'chmod +x ./gradlew'
sh './gradlew clean build'
}
}
/* 5) Docker 이미지 빌드 ------------------------------------------- */
stage('Build Docker Image') { steps { sh "docker build -t ${DOCKER_IMAGE_NAME} ." } }
/* 6) 이미지 아카이브 ---------------------------------------------- */
stage('Save Docker Image') {
steps {
sh "docker save ${DOCKER_IMAGE_NAME} | gzip > ${DOCKER_IMAGE_FILE}"
archiveArtifacts artifacts: "${DOCKER_IMAGE_FILE}"
}
}
/* 7) 로컬 배포 ---------------------------------------------------- */
stage('Deploy Docker Image Locally') {
steps {
script {
sh "docker load -i ${DOCKER_IMAGE_FILE}"
sh "docker stop study-pal-container || true"
sh "docker rm study-pal-container || true"
// prod 프로필로 컨테이너 실행. 모든 env 는 env‑file 로 전달
sh """
docker run -d --name study-pal-container -p 8080:8080 \\
--env-file ${env.ENV_FILE_PATH} \\
-e SPRING_PROFILES_ACTIVE=prod \\
--network docker_backend \\
${DOCKER_IMAGE_NAME}
"""
sh "docker system prune -f"
}
}
}
}
/* 8) 성공/실패 Discord 알림 (기존 코드 그대로) ------------------------- */
post {
success {
script {
def branch = sh(script: "git rev-parse --abbrev-ref HEAD", returnStdout: true).trim()
def commitMsg = sh(script: "git log -1 --pretty=%s", returnStdout: true).trim()
def author = sh(script: "git log -1 --pretty=%an", returnStdout: true).trim()
def shortSha = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim()
def jenkinsUrl = "http://jack8226.ddns.net:3005/job/study-pal/${env.BUILD_NUMBER}/"
def reportUrl = "${jenkinsUrl}execution/node/3/ws/build/reports/tests/test/index.html"
def desc = """
━━━━━━━━━━━━━━━━━━━━━━━━━━
📦 study-pal Jenkins Pipeline
✅ 빌드 성공
🌿 브랜치: ${branch}
✍️ 커밋 메시지:
${commitMsg}
🧑💻 작성자: ${author}
🔗 SHA: ${shortSha}
📄 테스트 리포트 보기: ${reportUrl}
━━━━━━━━━━━━━━━━━━━━━━━━━━
""".stripIndent().trim()
discordSend(
description: desc,
link: jenkinsUrl,
result: currentBuild.currentResult,
title: "📦 study-pal Jenkins Pipeline",
webhookURL: env.DISCORD_WEBHOOK
)
}
}
failure {
script {
def branch = sh(script: "git rev-parse --abbrev-ref HEAD", returnStdout: true).trim()
def commitMsg = sh(script: "git log -1 --pretty=%s", returnStdout: true).trim()
def author = sh(script: "git log -1 --pretty=%an", returnStdout: true).trim()
def shortSha = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim()
def jenkinsUrl = "http://jack8226.ddns.net:3005/job/study-pal/${env.BUILD_NUMBER}/"
def reportUrl = "${jenkinsUrl}execution/node/3/ws/build/reports/tests/test/index.html"
def desc = """
━━━━━━━━━━━━━━━━━━━━━━━━━━
📦 study-pal Jenkins Pipeline
❌ 빌드 실패
🌿 브랜치: ${branch}
✍️ 커밋 메시지:
${commitMsg}
🧑💻 작성자: ${author}
🔗 SHA: ${shortSha}
📄 테스트 리포트 보기: ${reportUrl}
━━━━━━━━━━━━━━━━━━━━━━━━━━
""".stripIndent().trim()
discordSend(
description: desc,
link: jenkinsUrl,
result: currentBuild.currentResult,
title: "📦 study-pal Jenkins Pipeline",
webhookURL: env.DISCORD_WEBHOOK
)
}
}
}
}