-
Notifications
You must be signed in to change notification settings - Fork 3
/
Jenkinsfile
83 lines (76 loc) · 2.67 KB
/
Jenkinsfile
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
pipeline {
agent any // 가능한 모든 Jenkins 에이전트에서 실행 가능
environment {
// docker-hub-credentials에서 사용자명/비밀번호를 가져옴
DOCKER_CREDENTIALS = credentials('docker-hub-credentials')
// 도커 이미지 이름 설정 (사용자명/앱이름 형식)
DOCKER_IMAGE = "${DOCKER_CREDENTIALS_USR}/${env.DOCKER_APP_NAME}"
}
stages {
stage('Checkout') {
steps {
checkout scm // Git 저장소에서 코드를 가져옴
}
}
stage('Create ENV file') {
steps {
withCredentials([file(credentialsId: 'env-file', variable: 'ENV_FILE')]) {
sh '''
cp "$ENV_FILE" .env
'''
}
}
}
stage('Check ENV') {
steps {
withCredentials([file(credentialsId: 'env-file', variable: 'ENV_FILE')]) {
sh '''
echo "=== ENV File Contents ==="
cat "$ENV_FILE"
echo "======================="
'''
}
}
}
stage('Build') {
steps {
// Gradle 빌드 실행 (테스트 제외)
sh '''
chmod +x gradlew
./gradlew clean build -x test
'''
}
}
stage('Docker Build & Push') {
steps {
// Docker Hub 로그인, 이미지 빌드, 푸시
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']) {
// EC2 서버에 SSH로 접속하여 새 도커 이미지 배포
sh '''
ssh -o StrictHostKeyChecking=no ubuntu@${EC2_HOST} "
sudo docker pull $DOCKER_IMAGE:latest
sudo docker stop ${DOCKER_APP_NAME} || true
sudo docker rm ${DOCKER_APP_NAME} || true
sudo docker run -e TZ=Asia/Seoul -d --name ${DOCKER_APP_NAME} -p 8080:8080 $DOCKER_IMAGE:latest
sudo docker container prune -f
"
'''
}
}
}
}
post {
always {
cleanWs() // 작업 완료 후 워크스페이스 정리
}
}
}