1+ name : Deploy to EC2
2+
3+ on :
4+ push :
5+ branches : [ main ]
6+
7+ jobs :
8+ deploy :
9+ runs-on : ubuntu-latest
10+ steps :
11+ - name : Checkout
12+ uses : actions/checkout@v4
13+
14+ - name : Docker Build
15+ run : docker build -t eightyage .
16+
17+ - name : Configure AWS credentials
18+ uses : aws-actions/configure-aws-credentials@v2
19+ with :
20+ aws-access-key-id : ${{ secrets.AWS_ACCESS_KEY }}
21+ aws-secret-access-key : ${{ secrets.AWS_SECRET_KEY }}
22+ aws-region : ap-northeast-2
23+
24+ - name : ECR Login
25+ run : |
26+ aws ecr get-login-password | \
27+ docker login --username AWS --password-stdin ${{ secrets.ECR_URI }}
28+
29+ - name : Docker Images Check
30+ run : docker images
31+
32+ - name : ECR Push
33+ run : |
34+ docker tag eightyage:latest ${{ secrets.ECR_URI }}
35+ docker push ${{ secrets.ECR_URI }}
36+
37+ - name : Deploy on EC2
38+ uses : appleboy/ssh-action@v1
39+ with :
40+ host : ${{ secrets.EC2_HOST }}
41+ username : ubuntu
42+ key : ${{ secrets.EC2_SSH_KEY }}
43+ envs : ECR_URI,DB_URL,DB_USER,DB_PASSWORD,JWT_SECRET_KEY,AWS_ACCESS_KEY,AWS_SECRET_KEY,REDIS_HOST
44+
45+ script : |
46+ export ECR_URI=${{ secrets.ECR_URI }}
47+ export DB_URL=${{ secrets.DB_URL }}
48+ export DB_USER=${{ secrets.DB_USER }}
49+ export DB_PASSWORD=${{ secrets.DB_PASSWORD }}
50+ export JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }}
51+ export AWS_ACCESS_KEY=${{ secrets.AWS_ACCESS_KEY }}
52+ export AWS_SECRET_KEY=${{ secrets.AWS_SECRET_KEY }}
53+ export REDIS_HOST=${{ secrets.REDIS_HOST }}
54+
55+ docker ps -q --filter ancestor=$ECR_URI | xargs -r docker stop
56+ docker ps -aq --filter ancestor=$ECR_URI | xargs -r docker rm
57+
58+ aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin $ECR_URI
59+ docker pull $ECR_URI
60+ docker run -d -p 8080:8080 \
61+ -e DB_URL=$DB_URL \
62+ -e DB_USER=$DB_USER \
63+ -e DB_PASSWORD=$DB_PASSWORD \
64+ -e JWT_SECRET_KEY=$JWT_SECRET_KEY \
65+ -e AWS_ACCESS_KEY=$AWS_ACCESS_KEY \
66+ -e AWS_SECRET_KEY=$AWS_SECRET_KEY \
67+ -e REDIS_HOST=$REDIS_HOST \
68+ $ECR_URI
69+
70+ - name : Health Check
71+ uses : appleboy/ssh-action@v1
72+ with :
73+ host : ${{ secrets.EC2_HOST }}
74+ username : ubuntu
75+ key : ${{ secrets.EC2_SSH_KEY }}
76+ script : |
77+ for i in {1..10}; do
78+ echo "โณ Health check attempt $i..."
79+ if curl -f http://localhost:8080/actuator/health; then
80+ echo "โ
Health check succeeded!"
81+ exit 0
82+ fi
83+ sleep 5
84+ done
85+ echo "โ Health check failed after multiple attempts"
86+ exit 1
87+
88+ - name : Notify Slack - ๋ฐฐํฌ ์ฑ๊ณต
89+ if : success()
90+ run : |
91+ curl -X POST -H 'Content-type: application/json' \
92+ --data '{
93+ "text": "โ
*๋ฐฐํฌ ์ฑ๊ณต!* ๐",
94+ "blocks": [
95+ {
96+ "type": "section",
97+ "text": {
98+ "type": "mrkdwn",
99+ "text": "*โ
๋ฐฐํฌ ์ฑ๊ณตํ์ต๋๋ค!*\n\n*๋ธ๋์น:* `${{ github.ref_name }}`\n<http://3.39.158.229:8080/actuator/health|๐ ๋ฐฐํฌ๋ ์๋น์ค ์ํ ๋ณด๊ธฐ>"
100+ }
101+ }
102+ ]
103+ }' \
104+ ${{ secrets.SLACK_WEBHOOK_URL }}
105+
106+ - name : Notify Slack - ๋ฐฐํฌ ์คํจ
107+ if : failure()
108+ run : |
109+ curl -X POST -H 'Content-type: application/json' \
110+ --data '{
111+ "text": "โ *๋ฐฐํฌ ์คํจ!* ๐ฅ",
112+ "blocks": [
113+ {
114+ "type": "section",
115+ "text": {
116+ "type": "mrkdwn",
117+ "text": "*โ ๋ฐฐํฌ ์คํจํ์ต๋๋ค!*\n\n*๋ธ๋์น:* `${{ github.ref_name }}`\n<https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|๐ ์คํจ ๋ก๊ทธ ํ์ธํ๊ธฐ>"
118+ }
119+ }
120+ ]
121+ }' \
122+ ${{ secrets.SLACK_WEBHOOK_URL }}
0 commit comments