-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJenkinsfile
More file actions
104 lines (95 loc) · 4.81 KB
/
Copy pathJenkinsfile
File metadata and controls
104 lines (95 loc) · 4.81 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
pipeline {
agent any // 어떤 환경에서도 실행 가능
environment {
DOCKER_COMPOSE = 'docker-compose'
}
stages {
stage('Checkout') { // GitLab에서 코드 가져오기
steps {
checkout scm
}
}
stage('Build') {
failFast true
parallel {
stage('Backend') { // 백엔드 빌드 (Spring Boot)
steps {
dir('backend') {
sh 'chmod +x gradlew' // 실행 권한 부여
sh './gradlew clean build -x test' // Gradle 빌드 (테스트 제외)
}
}
}
stage('Frontend') { // 프론트엔드 빌드 (React, Next.js)
steps {
dir('frontend') {
sh 'pnpm install'
sh 'pnpm build'
}
}
}
}
}
stage('Docker Build and Deploy') { // Docker 이미지 빌드 및 컨테이너 실행
steps {
script {
withCredentials([
string(credentialsId: 'DB_URL', variable: 'DB_URL'),
string(credentialsId: 'DB_USERNAME', variable: 'DB_USERNAME'),
string(credentialsId: 'DB_PASSWORD', variable: 'DB_PASSWORD'),
string(credentialsId: 'MYSQL_USER', variable: 'MYSQL_USER'),
string(credentialsId: 'MYSQL_PASSWORD', variable: 'MYSQL_PASSWORD'),
string(credentialsId: 'MYSQL_ROOT_PASSWORD', variable: 'MYSQL_ROOT_PASSWORD'),
string(credentialsId: 'JWT_SECRET_KEY', variable: 'JWT_SECRET_KEY'),
string(credentialsId: 'KAKAO_CLIENT_ID', variable: 'KAKAO_CLIENT_ID'),
string(credentialsId: 'KAKAO_CLIENT_SECRET', variable: 'KAKAO_CLIENT_SECRET'),
string(credentialsId: 'KAKAO_REDIRECT_URL', variable: 'KAKAO_REDIRECT_URL'),
string(credentialsId: 'SERVER_DOMAIN', variable: 'SERVER_DOMAIN'),
string(credentialsId: 'FRONTEND_URL', variable: 'FRONTEND_URL'),
string(credentialsId: 'MANAGER_API_KEY', variable: 'MANAGER_API_KEY'),
string(credentialsId: 'FINANCE_BASE_URL', variable: 'FINANCE_BASE_URL'),
string(credentialsId: 'SSAFY_DEMAND_DEPOSIT_NO', variable: 'SSAFY_DEMAND_DEPOSIT_NO'),
string(credentialsId: 'CARD_UNIQUE_NO', variable: 'CARD_UNIQUE_NO')
]) {
sh '''
echo "🔄 Stopping existing containers..."
docker-compose down
echo "🔄 Building Docker images..."
docker-compose build \
--build-arg DB_URL=$DB_URL \
--build-arg DB_USERNAME=$DB_USERNAME \
--build-arg DB_PASSWORD=$DB_PASSWORD \
--build-arg MYSQL_USER=$MYSQL_USER \
--build-arg MYSQL_PASSWORD=$MYSQL_PASSWORD \
--build-arg MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD \
--build-arg JWT_SECRET_KEY=$JWT_SECRET_KEY \
--build-arg KAKAO_CLIENT_ID=$KAKAO_CLIENT_ID \
--build-arg KAKAO_CLIENT_SECRET=$KAKAO_CLIENT_SECRET \
--build-arg KAKAO_REDIRECT_URL=$KAKAO_REDIRECT_URL \
--build-arg SERVER_DOMAIN=$SERVER_DOMAIN \
--build-arg FRONTEND_URL=$FRONTEND_URL \
--build-arg MANAGER_API_KEY=$MANAGER_API_KEY \
--build-arg FINANCE_BASE_URL=$FINANCE_BASE_URL \
--build-arg SSAFY_DEMAND_DEPOSIT_NO=$SSAFY_DEMAND_DEPOSIT_NO \
--build-arg CARD_UNIQUE_NO=$CARD_UNIQUE_NO
echo "🧹 Removing local Docker images..."
docker rmi workspace-backend || true
docker rmi workspace-frontend || true
echo "🚀 Starting containers..."
docker-compose up -d
'''
}
}
}
}
}
post {
success {
echo '✅ Pipeline succeeded!'
}
failure {
echo '❌ Pipeline failed!'
sh "${DOCKER_COMPOSE} down"
}
}
}