Skip to content

Commit 7935358

Browse files
committed
refactor: dev ec2 docker-compose deploy workflow
1 parent 66f7646 commit 7935358

File tree

1 file changed

+56
-59
lines changed

1 file changed

+56
-59
lines changed

.github/workflows/develop-build-deploy.yml

+56-59
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Develop Build & Deploy
22

33
on:
44
push:
5-
branches: [ "develop" ]
5+
branches: [ "fix/#88-docker-deploy-platform" ]
66

77
env:
88
DOCKERHUB_IMAGE_NAME: walwal-server
@@ -38,69 +38,70 @@ jobs:
3838
--scan
3939
cache-read-only: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }}
4040

41-
# Docker 이미지 빌드 및 도커 허브 푸시
42-
- name: Docker build & push
43-
run: |
44-
docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_TOKEN }}
45-
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }} .
46-
docker push ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}
47-
48-
# SSH 키 파일 생성
49-
- name: Create SSH key file
50-
run: echo "${{ secrets.EC2_PRIVATE_KEY }}" > private_key.pem
51-
52-
# SSH 키 파일 권한 변경
53-
- name: Set SSH key permissions
54-
run: chmod 600 private_key.pem
41+
# Dockerhub 로그인
42+
- name: Login to Dockerhub
43+
uses: docker/login-action@v3
44+
with:
45+
username: ${{ secrets.DOCKERHUB_USERNAME }}
46+
password: ${{ secrets.DOCKERHUB_TOKEN }}
5547

56-
# Ensure the .ssh directory exists
57-
- name: Ensure .ssh directory exists
58-
run: mkdir -p ~/.ssh
48+
# Docker 메타데이터 추출
49+
- name: Extract Docker metadata
50+
id: metadata
51+
uses: docker/[email protected]
52+
env:
53+
DOCKERHUB_IMAGE_FULL_NAME: ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}
54+
with:
55+
images: ${{ env.DOCKERHUB_IMAGE_FULL_NAME }}
56+
tags: |
57+
type=sha,prefix=
5958
60-
# Add EC2 host key to known_hosts
61-
- name: Add EC2 host key to known_hosts
62-
run: ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts
59+
# Docker 이미지 빌드 및 도커허브로 푸시
60+
- name: Docker Build and Push
61+
uses: docker/build-push-action@v5
62+
with:
63+
context: .
64+
push: true
65+
tags: ${{ steps.metadata.outputs.tags }}
6366

6467
# 서버로 docker-compose 파일 전송
6568
- name: Copy docker-compose file to EC2
66-
run: |
67-
rsync -avzr --delete -e "ssh -i private_key.pem" docker-compose.yaml ${{ secrets.EC2_USERNAME }}@${{ secrets.EC2_HOST }}:/home/ec2-user/
68-
ssh -i private_key.pem ${{ secrets.EC2_USERNAME }}@${{ secrets.EC2_HOST }} "sudo mv /home/ec2-user/docker-compose.yaml /root/"
69+
uses: burnett01/[email protected]
70+
with:
71+
switches: -avzr --delete
72+
remote_host: ${{ secrets.EC2_HOST }}
73+
remote_user: ${{ secrets.EC2_USERNAME }}
74+
remote_key: ${{ secrets.EC2_PRIVATE_KEY }}
75+
path: docker-compose.yaml
76+
remote_path: /home/ec2-user/
6977

7078
- name: Copy default.conf to EC2
71-
run: |
72-
rsync -avzr --delete -e "ssh -i private_key.pem" ./nginx ${{ secrets.EC2_USERNAME }}@${{ secrets.EC2_HOST }}:/home/ec2-user/
73-
ssh -i private_key.pem ${{ secrets.EC2_USERNAME }}@${{ secrets.EC2_HOST }} "sudo mv /home/ec2-user/nginx /root/"
74-
75-
- name: Current Time
76-
uses: gerred/[email protected]
77-
id: current-time
78-
79-
- name: Replace string
80-
uses: frabert/[email protected]
81-
id: format-time
79+
uses: burnett01/[email protected]
8280
with:
83-
pattern: '[:\.]+'
84-
string: "${{ steps.current-time.outputs.time }}"
85-
replace-with: '-'
86-
flags: 'g'
87-
88-
- name: Prepare deployment package
89-
run: |
90-
zip -r deployment-package.zip docker-compose.yaml nginx/default.conf
91-
92-
- name: Beanstalk Deploy
93-
uses: einaregilsson/beanstalk-deploy@v22
81+
switches: -avzr --delete
82+
remote_host: ${{ secrets.EC2_HOST }}
83+
remote_user: ${{ secrets.EC2_USERNAME }}
84+
remote_key: ${{ secrets.EC2_PRIVATE_KEY }}
85+
path: ./nginx
86+
remote_path: /home/ec2-user/
87+
88+
# EC2로 배포
89+
- name: Deploy to EC2 Server
90+
uses: appleboy/[email protected]
91+
env:
92+
IMAGE_FULL_URL: ${{ steps.metadata.outputs.tags }}
93+
DOCKERHUB_IMAGE_NAME: ${{ env.DOCKERHUB_IMAGE_NAME }}
9494
with:
95-
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
96-
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
97-
existing_bucket_name: "walwal-server-dev-deployment"
98-
application_name: "walwal-dev"
99-
environment_name: "Walwal-dev-env"
100-
version_label: "walwal-dev-${{ github.run_id }}-${{ steps.format-time.outputs.replaced }}"
101-
region: ap-northeast-2
102-
deployment_package: deployment-package.zip
103-
wait_for_environment_recovery: 180
95+
host: ${{ secrets.EC2_HOST }}
96+
username: ${{ secrets.EC2_USERNAME }}
97+
key: ${{ secrets.EC2_PRIVATE_KEY }}
98+
envs: IMAGE_FULL_URL, DOCKERHUB_IMAGE_NAME # docker-compose.yml 에서 사용할 환경 변수
99+
debug: true
100+
script: |
101+
echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
102+
docker compose up -d
103+
docker exec -d nginx nginx -s reload
104+
docker image prune -a -f
104105
105106
# Slack 알림
106107
- name: Send Deploy Result to Slack
@@ -115,7 +116,3 @@ jobs:
115116
- build scan report: ${{ steps.gradle.outputs.build-scan-url }}
116117
- deploy status: ${{ job.status }}
117118
- deploy time: ${{ steps.current-time.outputs.time }}
118-
119-
# SSH 키 파일 삭제
120-
- name: Delete SSH key file
121-
run: rm private_key.pem

0 commit comments

Comments
 (0)