@@ -2,7 +2,7 @@ name: Develop Build & Deploy
2
2
3
3
on :
4
4
push :
5
- branches : [ "develop " ]
5
+ branches : [ "fix/#88-docker-deploy-platform " ]
6
6
7
7
env :
8
8
DOCKERHUB_IMAGE_NAME : walwal-server
@@ -38,69 +38,70 @@ jobs:
38
38
--scan
39
39
cache-read-only : ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }}
40
40
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 }}
55
47
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
+
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=
59
58
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 }}
63
66
64
67
# 서버로 docker-compose 파일 전송
65
68
- 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
+
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/
69
77
70
78
- 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
-
77
- id : current-time
78
-
79
- - name : Replace string
80
-
81
- id : format-time
79
+
82
80
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
+
91
+ env :
92
+ IMAGE_FULL_URL : ${{ steps.metadata.outputs.tags }}
93
+ DOCKERHUB_IMAGE_NAME : ${{ env.DOCKERHUB_IMAGE_NAME }}
94
94
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
104
105
105
106
# Slack 알림
106
107
- name : Send Deploy Result to Slack
@@ -115,7 +116,3 @@ jobs:
115
116
- build scan report: ${{ steps.gradle.outputs.build-scan-url }}
116
117
- deploy status: ${{ job.status }}
117
118
- 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