-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJenkinsfile
More file actions
131 lines (122 loc) · 5.64 KB
/
Jenkinsfile
File metadata and controls
131 lines (122 loc) · 5.64 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
def EC2_HOST = ''
def ENV_FILE_NAME = ''
def DOCKER_FILE_NAME = ''
def MODULE_NAME = ''
def MODULE_PORT = ''
pipeline {
agent any
stages {
stage('Set EC2 Host') {
steps {
script {
echo "Current branch : ${env.BRANCH_NAME}"
// 설정된 브랜치에 따라 변수를 설정
if (env.BRANCH_NAME == 'main-product') {
echo "Setting up for main-product branch"
withCredentials([string(credentialsId: 'product-module-host', variable: 'HOST')]) {
ENV_FILE_NAME = 'product-properties'
DOCKER_FILE_NAME = 'Dockerfile_Product'
MODULE_NAME = 'product_module'
MODULE_PORT = '8081'
EC2_HOST = HOST
}
} else if (env.BRANCH_NAME == 'main-user') {
echo "Setting up for main-user branch"
withCredentials([string(credentialsId: 'user-module-host', variable: 'HOST')]) {
ENV_FILE_NAME = 'user-properties'
DOCKER_FILE_NAME = 'Dockerfile_User'
MODULE_NAME = 'user_module'
MODULE_PORT = '8082'
EC2_HOST = HOST
}
} else if (env.BRANCH_NAME == 'main-api') {
echo "Setting up for main-api branch"
withCredentials([string(credentialsId: 'api-module-host', variable: 'HOST')]) {
ENV_FILE_NAME = 'api-properties'
DOCKER_FILE_NAME = 'Dockerfile_Api'
MODULE_NAME = 'api_module'
MODULE_PORT = '8090'
EC2_HOST = HOST
}
} else {
error "Branch ${env.BRANCH_NAME} is not configured to run this pipeline."
}
// 로그로 변수 상태 확인
echo "EC2_HOST: ${EC2_HOST}"
echo "ENV_FILE_NAME: ${ENV_FILE_NAME}"
echo "DOCKER_FILE_NAME: ${DOCKER_FILE_NAME}"
echo "MODULE_NAME: ${MODULE_NAME}"
echo "MODULE_PORT: ${MODULE_PORT}"
}
}
}
stage('Retrieve Application Properties from Jenkins') {
steps {
script {
withCredentials([file(credentialsId: "${ENV_FILE_NAME}", variable: 'APP_PROPS')]) {
echo "Using application.properties from Jenkins credentials."
sh """
mkdir -p "${MODULE_NAME}/src/main/resources"
cp "$APP_PROPS" "${MODULE_NAME}/src/main/resources/application.properties"
ls -la "${MODULE_NAME}/src/main/resources/"
cat "${MODULE_NAME}/src/main/resources/application.properties"
"""
}
}
}
}
stage('Build and Push Docker Image') {
steps {
script {
echo "Building Docker Image using ${DOCKER_FILE_NAME}..."
withCredentials([usernamePassword(credentialsId: 'docker-credentials', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASSWORD')]) {
sh """
echo '${DOCKER_PASSWORD}' | docker login -u '${DOCKER_USER}' --password-stdin
docker build -t '${DOCKER_USER}/${MODULE_NAME}' -f '${DOCKER_FILE_NAME}' .
docker push '${DOCKER_USER}/${MODULE_NAME}'
"""
}
}
}
}
stage('Deploy to AWS EC2') {
steps {
script {
echo "Deploying Docker Image to AWS EC2..."
withCredentials([usernamePassword(credentialsId: 'docker-credentials', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASSWORD')]) {
sshagent(['ec2-ssh-key']) {
sh """
echo '
sudo docker stop ${MODULE_NAME} || true
sudo docker rm ${MODULE_NAME} || true
sudo docker rmi ${DOCKER_USER}/${MODULE_NAME} || true
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USER}" --password-stdin
sudo docker pull ${DOCKER_USER}/${MODULE_NAME}
sudo docker run -d --name ${MODULE_NAME} -p ${MODULE_PORT}:${MODULE_PORT} ${DOCKER_USER}/${MODULE_NAME}
sudo docker image prune -f
' > /tmp/deploy_script.sh
scp /tmp/deploy_script.sh ubuntu@${EC2_HOST}:/tmp/
ssh -o StrictHostKeyChecking=no ubuntu@${EC2_HOST} 'bash /tmp/deploy_script.sh'
"""
}
}
}
}
}
}
post {
always {
echo 'Cleaning up...'
// 각 모듈의 application.properties 파일 정리
sh """
sudo rm -f ${MODULE_NAME}/src/main/resources/application.properties
"""
}
success {
echo 'Deployment succeeded!'
}
failure {
echo 'Deployment failed!'
}
}
}