-
Notifications
You must be signed in to change notification settings - Fork 0
145 lines (125 loc) · 5.42 KB
/
dev_deploy.yml
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
name: Java CI/CD with Gradle
# 워크플로우가 실행될 조건을 정의합니다.
on:
push:
branches: [ "dev" ] # dev 브랜치에 push가 발생하면 실행됩니다.
pull_request:
branches: [ "dev" ] # dev 브랜치에 pull request가 생성되면 실행됩니다.
# 워크플로우가 접근할 수 있는 권한을 설정합니다.
permissions:
contents: read
jobs:
# Docker 이미지를 빌드하고 Docker Hub에 푸시하는 작업을 정의합니다.
build-docker-image:
runs-on: ubuntu-latest # 워크플로우가 실행될 환경을 지정합니다.
steps:
# 리포지토리의 코드를 체크아웃합니다.
- uses: actions/checkout@v3
# JDK 17을 설치하고 환경을 설정합니다.
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
# Gradle Wrapper 파일에 실행 권한을 부여합니다.
- name: Grant Execute Permission For Gradlew
run: chmod +x gradlew
# gradle caching - 빌드 시간 향상
- name: Gradle Caching
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
# Gradle을 사용하여 프로젝트를 빌드합니다.
- name: Build With Gradle
run: ./gradlew build -x test
# Docker 이미지를 빌드합니다.
- name: docker image build
run: docker build -t qormoon/fiurinee_docker .
# Docker Hub에 로그인합니다. 로그인 정보는 GitHub Secrets를 통해 안전하게 관리됩니다.
- name: docker login
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }} # Docker Hub 사용자 이름
password: ${{ secrets.DOCKERHUB_PASSWORD }} # Docker Hub 비밀번호
# 빌드된 Docker 이미지를 Docker Hub에 푸시합니다.
- name: docker Hub push
run: docker push qormoon/fiurinee_docker
# 빌드된 JAR 파일을 원격 서버에 복사합니다.
- name: Copy jar file to remote
uses: appleboy/scp-action@master
with:
username: ec2-user
host: ${{ secrets.EC2_HOST }}
key: ${{ secrets.EC2_SSH_KEY }}
source: "./build/libs/*.jar"
target: "/home/ec2-user/cicd"
strip_components: 2
# 배포 스크립트를 원격 서버에 복사합니다.
- name: Copy deploy script file to remote
uses: appleboy/scp-action@master
with:
username: ec2-user
host: ${{ secrets.EC2_HOST }}
key: ${{ secrets.EC2_SSH_KEY }}
source: ".github/scripts/deploy.sh"
target: "/home/ec2-user/cicd"
# 배포 스크립트를 원격 서버에서 실행합니다.
- name: Execute deploy script
uses: appleboy/ssh-action@master
with:
username: ec2-user
host: ${{ secrets.EC2_HOST }}
key: ${{ secrets.EC2_SSH_KEY }}
script_stop: true
script: |
chmod +x /home/ec2-user/cicd/deploy.sh
sh /home/ec2-user/cicd/deploy.sh
# # 배포
# - name: Deploy
# uses: appleboy/ssh-action@master
# with:
# host: ${{ secrets.EC2_HOST }}
# username: ubuntu
# key: ${{ secrets.EC2_SSH_KEY }}
# envs: GITHUB_SHA
# script: |
# sudo docker ps
# sudo docker pull qormoon/fiurinee_docker
# sudo docker run -d -p 8080:8080 qormoon/fiurinee_docker
# sudo docker image prune -f
# # 새로 빌드된 Docker 이미지를 EC2 서버에 배포하는 작업을 정의합니다.
# deploy:
# needs: build-docker-image # build-docker-image 작업이 완료된 후에 실행됩니다.
# runs-on: ubuntu-latest # 워크플로우가 실행될 환경을 지정합니다.
#
# steps:
# # EC2 서버에 SSH로 접속하여 Docker 이미지를 pull하고 컨테이너를 재시작
# - name: Deploy to EC2
# uses: appleboy/ssh-action@master
# with:
# host: ${{ secrets.EC2_HOST }} # EC2 서버의 호스트 주소
# username: ubuntu
# key: ${{ secrets.EC2_SSH_KEY }} # EC2 서버에 접근하기 위한 SSH 개인 키
# script: |
# # Docker Hub에서 최신 이미지를 pull 합니다.
# sudo docker pull qormoon/fiurinee_docker
# # 기존 컨테이너를 중지합니다.
# sudo docker stop fiurinee || true
# # 기존 컨테이너를 제거합니다.
# sudo docker rm fiurinee || true
# # 새 컨테이너를 실행하면서 환경 변수를 전달합니다.
# sudo docker run -d -p 8080:8080 --name fiurinee \
# -e DB_URL=jdbc:postgresql://database-fiurinee.czyqweykwib4.ap-northeast-2.rds.amazonaws.com:5432/fiurinee \
# -e DB_USERNAME=${{ secrets.DB_USERNAME }} \
# -e DB_PASSWORD=${{ secrets.DB_PASSWORD }} \
# -e AWS_ACCESSKEY=${{ secrets.AWS_ACCESSKEY }} \
# -e AWS_SECRETKEY=${{ secrets.AWS_SECRETKEY }} \
# -e AWS_BUCKET=${{ secrets.AWS_BUCKET }} \
# -e hibernate_ddl_auto=update \
# -v fiurinee_data:/var/lib/postgresql/data \
# qormoon/fiurinee_docker