1616 - dev
1717
1818jobs :
19- build :
19+ build-and-push :
2020 runs-on : ubuntu-latest
2121
2222 steps :
@@ -32,70 +32,25 @@ jobs:
3232 - name : Grant execute permission for gradlew
3333 run : chmod +x ./gradlew
3434
35- - name : Set environment variables
35+ - name : Build Docker Image
3636 run : |
37- echo "EMAIL_USERNAME=${{ secrets.EMAIL_USERNAME }}" >> $GITHUB_ENV
38- echo "EMAIL_PASSWORD=${{ secrets.EMAIL_PASSWORD }}" >> $GITHUB_ENV
39- echo "SENDER_EMAIL=${{ secrets.SENDER_EMAIL }}" >> $GITHUB_ENV
40-
41- echo "DISCORD_CLIENT_ID=${{ secrets.DISCORD_CLIENT_ID }}" >> $GITHUB_ENV
42- echo "DISCORD_CLIENT_SECRET=${{ secrets.DISCORD_CLIENT_SECRET }}" >> $GITHUB_ENV
43-
44- echo "GOOGLE_CLIENT_ID=${{ secrets.GOOGLE_CLIENT_ID }}" >> $GITHUB_ENV
45- echo "GOOGLE_CLIENT_SECRET=${{ secrets.GOOGLE_CLIENT_SECRET }}" >> $GITHUB_ENV
46-
47- echo "KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}" >> $GITHUB_ENV
48- echo "KAKAO_CLIENT_SECRET=${{ secrets.KAKAO_CLIENT_SECRET }}" >> $GITHUB_ENV
49-
50- echo "NAVER_CLIENT_ID=${{ secrets.NAVER_CLIENT_ID }}" >> $GITHUB_ENV
51- echo "NAVER_CLIENT_SECRET=${{ secrets.NAVER_CLIENT_SECRET }}" >> $GITHUB_ENV
52- env :
53- EMAIL_USERNAME : ${{ secrets.EMAIL_USERNAME }}
54- EMAIL_PASSWORD : ${{ secrets.EMAIL_PASSWORD }}
55- SENDER_EMAIL : ${{ secrets.SENDER_EMAIL }}
56- DISCORD_CLIENT_ID : ${{ secrets.DISCORD_CLIENT_ID }}
57- DISCORD_CLIENT_SECRET : ${{ secrets.DISCORD_CLIENT_SECRET }}
58- GOOGLE_CLIENT_ID : ${{ secrets.GOOGLE_CLIENT_ID }}
59- GOOGLE_CLIENT_SECRET : ${{ secrets.GOOGLE_CLIENT_SECRET }}
60- KAKAO_CLIENT_ID : ${{ secrets.KAKAO_CLIENT_ID }}
61- KAKAO_CLIENT_SECRET : ${{ secrets.KAKAO_CLIENT_SECRET }}
62- NAVER_CLIENT_ID : ${{ secrets.NAVER_CLIENT_ID }}
63- NAVER_CLIENT_SECRET : ${{ secrets.NAVER_CLIENT_SECRET }}
37+ docker build -t ${{ secrets.DOCKER_USERNAME }}/play-hive:latest .
6438
65- - name : Build and Test with Gradle
66- run : ./gradlew clean build --info
67- env :
68- EMAIL_USERNAME : ${{ secrets.EMAIL_USERNAME }}
69- EMAIL_PASSWORD : ${{ secrets.EMAIL_PASSWORD }}
70- SENDER_EMAIL : ${{ secrets.SENDER_EMAIL }}
71- DISCORD_CLIENT_ID : ${{ secrets.DISCORD_CLIENT_ID }}
72- DISCORD_CLIENT_SECRET : ${{ secrets.DISCORD_CLIENT_SECRET }}
73- GOOGLE_CLIENT_ID : ${{ secrets.GOOGLE_CLIENT_ID }}
74- GOOGLE_CLIENT_SECRET : ${{ secrets.GOOGLE_CLIENT_SECRET }}
75- KAKAO_CLIENT_ID : ${{ secrets.KAKAO_CLIENT_ID }}
76- KAKAO_CLIENT_SECRET : ${{ secrets.KAKAO_CLIENT_SECRET }}
77- NAVER_CLIENT_ID : ${{ secrets.NAVER_CLIENT_ID }}
78- NAVER_CLIENT_SECRET : ${{ secrets.NAVER_CLIENT_SECRET }}
79-
80- - name : List JAR Files
81- run : ls -la build/libs/
82-
83- - name : Upload Artifact
84- uses : actions/upload-artifact@v3
39+ - name : Login to Docker Hub
40+ uses : docker/login-action@v2
8541 with :
86- name : spring-app
87- path : build/libs/*.jar
42+ username : ${{ secrets.DOCKER_USERNAME }}
43+ password : ${{ secrets.DOCKER_PASSWORD }}
44+
45+ - name : Push Docker Image to Docker Hub
46+ run : |
47+ docker push ${{ secrets.DOCKER_USERNAME }}/play-hive:latest
8848
8949 deploy :
90- needs : build
50+ needs : build-and-push
9151 runs-on : ubuntu-latest
9252
93- steps :
94- - name : Download Artifact
95- uses : actions/download-artifact@v3
96- with :
97- name : spring-app
98-
53+ steps :
9954 - name : Install Java on AWS
10055 uses : appleboy/ssh-action@v0.1.10
10156 with :
@@ -112,63 +67,52 @@ jobs:
11267 echo "Java is already installed."
11368 fi
11469
115- - name : Deploy to AWS
116- uses : appleboy/scp-action@v0.1.4
117- with :
118- host : ${{ secrets.AWS_SERVER_IP }}
119- username : ${{ secrets.AWS_USERNAME }}
120- key : ${{ secrets.SSH_PRIVATE_KEY }}
121- source : " *.jar"
122- target : " ~/play-hive"
123-
124- - name : Set environment variables on AWS
70+ - name : Deploy to AWS and Restart Services with Docker Compose
12571 uses : appleboy/ssh-action@v0.1.10
12672 with :
12773 host : ${{ secrets.AWS_SERVER_IP }}
12874 username : ${{ secrets.AWS_USERNAME }}
12975 key : ${{ secrets.SSH_PRIVATE_KEY }}
13076 script : |
131- echo "Setting environment variables on AWS server..."
132- echo "export EMAIL_USERNAME=${{ secrets.EMAIL_USERNAME }}" >> ~/.bashrc
133- echo "export EMAIL_PASSWORD=${{ secrets.EMAIL_PASSWORD }}" >> ~/.bashrc
134- echo "export SENDER_EMAIL=${{ secrets.SENDER_EMAIL }}" >> ~/.bashrc
135- echo "export DISCORD_CLIENT_ID=${{ secrets.DISCORD_CLIENT_ID }}" >> ~/.bashrc
136- echo "export DISCORD_CLIENT_SECRET=${{ secrets.DISCORD_CLIENT_SECRET }}" >> ~/.bashrc
137- echo "export GOOGLE_CLIENT_ID=${{ secrets.GOOGLE_CLIENT_ID }}" >> ~/.bashrc
138- echo "export GOOGLE_CLIENT_SECRET=${{ secrets.GOOGLE_CLIENT_SECRET }}" >> ~/.bashrc
139- echo "export KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}" >> ~/.bashrc
140- echo "export KAKAO_CLIENT_SECRET=${{ secrets.KAKAO_CLIENT_SECRET }}" >> ~/.bashrc
141- echo "export NAVER_CLIENT_ID=${{ secrets.NAVER_CLIENT_ID }}" >> ~/.bashrc
142- echo "export NAVER_CLIENT_SECRET=${{ secrets.NAVER_CLIENT_SECRET }}" >> ~/.bashrc
143- source ~/.bashrc
144- echo "Environment variables set successfully."
145-
146- - name : Restart Server
147- uses : appleboy/ssh-action@v0.1.10
148- with :
149- host : ${{ secrets.AWS_SERVER_IP }}
150- username : ${{ secrets.AWS_USERNAME }}
151- key : ${{ secrets.SSH_PRIVATE_KEY }}
152- script : |
153- # Define variables
77+ # 이동할 디렉토리 설정
15478 DEPLOY_DIR=~/play-hive
155- JAR_FILE=server-0.0.1-SNAPSHOT.jar
15679
157- # Kill process on port 8080
158- echo "Finding and killing process on port 8080..."
159- PID=$(sudo lsof -t -i:8080)
160- if [ -n "$PID" ]; then
161- echo "Killing process with PID $PID..."
162- sudo kill -9 $PID
163- else
164- echo "No process found on port 8080."
165- fi
166-
167- # Navigate to deployment directory
16880 echo "Navigating to deployment directory: $DEPLOY_DIR"
16981 cd $DEPLOY_DIR || exit
17082
171- # Start the new server with environment variables
172- echo "Starting new server: $JAR_FILE"
173- nohup env EMAIL_USERNAME=${{ secrets.EMAIL_USERNAME }} EMAIL_PASSWORD=${{ secrets.EMAIL_PASSWORD }} SENDER_EMAIL=${{ secrets.SENDER_EMAIL }} java -jar $JAR_FILE > app.log 2>&1 &
174- echo "Server started. Logs can be found in $DEPLOY_DIR/app.log"
83+ # 최신 Docker 및 Docker Compose 설치 확인
84+ echo "Ensuring Docker and Docker Compose are installed..."
85+
86+ # Docker 설치 여부 확인
87+ if ! docker --version &>/dev/null; then
88+ echo "Docker is not installed. Installing Docker..."
89+ sudo apt-get update
90+ sudo apt-get install -y docker.io
91+ sudo systemctl start docker
92+ sudo systemctl enable docker
93+ else
94+ echo "Docker is already installed."
95+ fi
96+
97+ # Docker Compose 설치 여부 확인
98+ if ! docker-compose --version &>/dev/null; then
99+ echo "Docker Compose is not installed. Installing Docker Compose..."
100+ sudo apt-get update
101+ sudo apt-get install -y docker-compose
102+ else
103+ echo "Docker Compose is already installed."
104+ fi
105+
106+ # 기존 컨테이너 중지 및 제거
107+ echo "Stopping and removing existing containers..."
108+ sudo docker-compose down || true
109+
110+ # 최신 이미지를 가져오기
111+ echo "Pulling the latest Docker image..."
112+ sudo docker-compose pull
113+
114+ # 컨테이너 재실행
115+ echo "Starting containers with Docker Compose..."
116+ sudo docker-compose up -d
117+
118+ echo "Deployment completed successfully!"
0 commit comments