-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathJenkinsfile
More file actions
106 lines (90 loc) · 3.42 KB
/
Jenkinsfile
File metadata and controls
106 lines (90 loc) · 3.42 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
pipeline {
agent any
options {
disableConcurrentBuilds()
}
triggers {
githubPush()
}
environment {
DOCKER_CREDENTIALS = credentials('docker-hub-credentials')
DOCKER_APP_NAME = 'teammanager'
DOCKER_IMAGE = "${DOCKER_CREDENTIALS_USR}/${env.DOCKER_APP_NAME}"
JAVA_HOME = '/usr/lib/jvm/java-21-openjdk-amd64'
PATH = "/usr/lib/jvm/java-21-openjdk-amd64/bin:${env.PATH}"
EC2_HOST = credentials('ec2-host')
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Create ENV file') {
steps {
withCredentials([file(credentialsId: 'env-file', variable: 'ENV_FILE')]) {
sh 'cp "$ENV_FILE" .env'
}
}
}
stage('Build') {
steps {
sh '''
echo "=== Java Environment ==="
echo "JAVA_HOME: $JAVA_HOME"
java -version
echo "=== Starting Gradle Build ==="
chmod +x gradlew
# Gradle에게 Java 위치 명시적으로 전달
./gradlew clean build -x test --no-daemon \
-Dorg.gradle.java.home=$JAVA_HOME
'''
}
}
stage('Docker Build & Push') {
steps {
sh '''
docker login -u $DOCKER_CREDENTIALS_USR -p $DOCKER_CREDENTIALS_PSW
docker build -t $DOCKER_IMAGE:latest .
docker push $DOCKER_IMAGE:latest
'''
}
}
stage('Deploy') {
steps {
sshagent(['ec2-ssh-key']) {
sh '''
# 이미지 태그 치환
sed -i "s|__APP_IMAGE_TAG__|${DOCKER_IMAGE}:latest|g" docker-compose.yml
# EC2에 배포 디렉토리 생성 및 권한 설정
ssh -o StrictHostKeyChecking=no ubuntu@${EC2_HOST} "
mkdir -p ~/deployment
chmod 755 ~/deployment
rm -f ~/deployment/.env ~/deployment/docker-compose.yml
"
# 파일 전송
scp -o StrictHostKeyChecking=no ${WORKSPACE}/docker-compose.yml ubuntu@${EC2_HOST}:~/deployment/
scp -o StrictHostKeyChecking=no ${WORKSPACE}/.env ubuntu@${EC2_HOST}:~/deployment/
# docker-compose 배포 실행
ssh -o StrictHostKeyChecking=no ubuntu@${EC2_HOST} "
cd ~/deployment
sudo docker-compose down || true
sudo docker-compose pull
sudo docker-compose up -d
# 정리 작업
sudo docker container prune -f
sudo docker image prune -f
# 배포 상태 확인
sudo docker-compose ps
"
'''
}
}
}
}
post {
always {
cleanWs()
}
}
}