-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjenkins_pipeline
164 lines (150 loc) Β· 5.93 KB
/
jenkins_pipeline
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
154
155
156
157
158
159
160
161
162
163
164
pipeline {
agent any
environment {
DB_HOST="postgres"
DB_USER = "admin"
DB_PASSWORD = "secret"
DB_NAME = "vet_clinic"
DB_PORT = "5432"
}
stages {
stage('Checkout Code') {
steps {
script {
def repos = [
"info-service": "https://github.com/vet-clinic-back/Info-service.git",
"sso-service": "https://github.com/vet-clinic-back/sso-service.git",
"metrics-service": "https://github.com/vet-clinic-back/metrics-service.git"
]
for (repo in repos.keySet()) {
dir(repo) {
git url: repos[repo], branch: 'main'
}
}
}
}
}
stage('Checkout Project Setup Props') {
steps {
dir('project-setup-props') {
git url: 'https://github.com/vet-clinic-back/project-setup-props.git', branch: 'main'
}
}
}
stage('Prepare SQL File') {
steps {
sh 'mkdir -p $WORKSPACE/sql'
sh 'cp project-setup-props/CREATE_1.sql $WORKSPACE/sql/'
}
}
stage('Build Docker Images') {
steps {
script {
def services = ["info-service", "sso-service", "metrics-service"] // "metrics-service"
for (service in services) {
dir(service) {
sh "docker build -t vet-clinic/${service}:latest ."
}
}
}
}
}
stage('Start PostgreSQL') {
steps {
script {
sh """
if [ -n "\$(docker ps -aq -f name=postgres)" ]; then
echo "π Stopping and removing existing PostgreSQL container"
docker stop \$(docker ps -aq -f name=postgres) || true
docker rm \$(docker ps -aq -f name=postgres) || true
fi
docker network create vet-clinic-network || true
docker run -d --name postgres \
--network vet-clinic-network \
-e POSTGRES_USER=$DB_USER \
-e POSTGRES_PASSWORD=$DB_PASSWORD \
-e POSTGRES_DB=$DB_NAME \
-p $DB_PORT:5432 \
-v pg_data:/var/lib/postgresql/data \
-v $WORKSPACE/sql/CREATE_1.sql:/docker-entrypoint-initdb.d/CREATE_1.sql \
postgres:14
"""
}
}
}
stage('Start Services') {
steps {
script {
def services = [ // 8082 is jenkins
"info-service": 8081,
"sso-service": 8083
]
for (service in services.keySet()) {
def port = services[service]
sh """
if [ -n "\$(docker ps -a -q -f name=${service})" ]; then
echo "π Stopping and removing existing container: ${service}"
docker stop ${service} || true
docker rm ${service} || true
else
echo "β
No existing ${service} container found."
fi
docker run -d --name ${service} \
--network vet-clinic-network \
-p ${port}:8080 \
-e DB_USER=$DB_USER \
-e DB_PASSWORD=$DB_PASSWORD \
-e DB_HOST=$DB_HOST \
-e DB_NAME=$DB_NAME \
-e DB_PORT=$DB_PORT \
-e POSTGRES_USER=$DB_USER \
-e POSTGRES_PASSWORD=$DB_PASSWORD \
-e POSTGRES_DB=$DB_NAME \
-e METRICS_HTTP_PORT=8080 \
-e METRICS_ALLOW_ORIGINS= \
-e METRICS_TCP_LISTEN_PORT=9000 \
vet-clinic/${service}:latest
"""
}
}
}
}
stage('Start metrics service') {
steps {
script {
sh """
# Check if the container exists
if [ -n "\$(docker ps -a -q -f name=metrics-service)" ]; then
echo "π Stopping and removing existing container: metrics-service"
docker stop metrics-service || true
docker rm metrics-service || true
else
echo "β
No existing metrics-service container found."
fi
# Start the metrics-service container
docker run -d --name metrics-service \\
--network vet-clinic-network \\
-p 8084:8080 \\
-p 9000:9000 \\
-e POSTGRES_HOST=${DB_HOST} \\
-e POSTGRES_PORT=${DB_PORT} \\
-e POSTGRES_USER=${DB_USER} \\
-e POSTGRES_PASSWORD=${DB_PASSWORD} \\
-e POSTGRES_DB=${DB_NAME} \\
-e METRICS_HTTP_PORT=8080 \\
-e METRICS_TCP_LISTEN_PORT=9000 \\
vet-clinic/metrics-service:latest
"""
}
}
}
}
post {
success {
echo 'Deployment successful!'
}
failure {
echo 'Build failed. Check logs!'
}
}
}