Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 서버 배포 #90

Merged
merged 3 commits into from
Nov 6, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
167 changes: 88 additions & 79 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -1,91 +1,100 @@

name: Production 배포
runs-on: ubuntu-latest
on:
push:
branches:
- main
env:
DOCKERHUB_USERNAME: meonghanyang
DOCKERHUB_IMAGE_NAME: server

jobs:
build-deploy:
name: Production 배포
runs-on: ubuntu-latest

steps:
- name: 기본 체크아웃
uses: actions/checkout@v3
steps:
- name: 기본 체크아웃
uses: actions/checkout@v3

- name: JDK 21 버전 설정
uses: actions/setup-java@v3
with:
distribution: 'corretto'
java-version: '21'
- name: JDK 21 버전 설정
uses: actions/setup-java@v3
with:
distribution: 'corretto'
java-version: '21'

- name: Gradlew 실행 권한 설정
run: chmod +x ./gradlew
- name: Gradlew 실행 권한 설정
run: chmod +x ./gradlew

- name: Gradle 빌드
id: gradle
uses: gradle/gradle-build-action@v2
with:
arguments: |
build
--scan
-x test
cache-read-only: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }}
- name: Gradle 빌드
id: gradle
uses: gradle/gradle-build-action@v2
with:
arguments: |
build
--scan
-x test
cache-read-only: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }}

- name: Dockerhub 로그인
uses: docker/login-action@v3
with:
username: ${{ env.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
- name: Dockerhub 로그인
uses: docker/login-action@v3
with:
username: ${{ env.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}

- name: Docker 메타데이터 추출
id: metadata
uses: docker/[email protected]
env:
DOCKERHUB_IMAGE_FULL_NAME: ${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}
with:
images: ${{ env.DOCKERHUB_IMAGE_FULL_NAME }}
tags:
${{ github.run_number }}
flavor: |
latest=false
- name: Docker 메타데이터 추출
id: metadata
uses: docker/[email protected]
env:
DOCKERHUB_IMAGE_FULL_NAME: ${{ env.DOCKERHUB_USERNAME }}/${{ env.DOCKERHUB_IMAGE_NAME }}
with:
images: ${{ env.DOCKERHUB_IMAGE_FULL_NAME }}
tags:
${{ github.run_number }}
flavor: |
latest=false

- name: Docker 이미지 빌드 및 도커허브로 푸시
uses: docker/[email protected]
with:
file: scripts/Dockerfile
context: .
push: true
tags: ${{ steps.metadata.outputs.tags }}
- name: Docker 이미지 빌드 및 도커허브로 푸시
uses: docker/[email protected]
with:
file: scripts/Dockerfile
context: .
push: true
tags: ${{ steps.metadata.outputs.tags }}

- name: 환경변수 주입
run: |
echo "${{ secrets.APPLICATION_SECRETS }}" > .env
- name: 환경변수 주입
run: |
echo "${{ secrets.APPLICATION_SECRETS }}" > .env

- name: 서버로 .env 파일 전송
uses: burnett01/[email protected]
with:
switches: -avzr --delete
remote_host: ${{ secrets.EC2_HOST }}
remote_user: ${{ secrets.EC2_USERNAME }}
remote_key: ${{ secrets.EC2_PRIVATE_KEY }}
path: .env
remote_path: /home/${{ secrets.EC2_USERNAME }}/
- name: 서버로 .env 파일 전송
uses: burnett01/[email protected]
with:
switches: -avzr --delete
remote_host: ${{ secrets.EC2_HOST }}
remote_user: ${{ secrets.EC2_USERNAME }}
remote_key: ${{ secrets.EC2_PRIVATE_KEY }}
path: .env
remote_path: /home/${{ secrets.EC2_USERNAME }}/

- name: 서버로 docker compose 파일 전송
uses: burnett01/[email protected]
with:
switches: -avzr --delete
remote_host: ${{ secrets.EC2_HOST }}
remote_user: ${{ secrets.EC2_USERNAME }}
remote_key: ${{ secrets.EC2_PRIVATE_KEY }}
path: scripts/docker-compose.yml
remote_path: /home/${{ secrets.EC2_USERNAME }}/
- name: 서버로 docker compose 파일 전송
uses: burnett01/[email protected]
with:
switches: -avzr --delete
remote_host: ${{ secrets.EC2_HOST }}
remote_user: ${{ secrets.EC2_USERNAME }}
remote_key: ${{ secrets.EC2_PRIVATE_KEY }}
path: scripts/docker-compose.yml
remote_path: /home/${{ secrets.EC2_USERNAME }}/

- name: EC2로 배포
uses: appleboy/ssh-action@master
env:
IMAGE_FULL_URL: ${{ steps.metadata.outputs.tags }}
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
envs: IMAGE_FULL_URL, DOCKERHUB_IMAGE_NAME
script: |
echo "${{ secrets.DOCKERHUB_ACCESS_TOKEN }}" | docker login -u "${{ env.DOCKERHUB_USERNAME }}" --password-stdin
docker compose down --remove-orphans
docker system prune -f
docker compose up --build -d
- name: EC2로 배포
uses: appleboy/ssh-action@master
env:
IMAGE_FULL_URL: ${{ steps.metadata.outputs.tags }}
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
envs: IMAGE_FULL_URL, DOCKERHUB_IMAGE_NAME
script: |
echo "${{ secrets.DOCKERHUB_ACCESS_TOKEN }}" | docker login -u "${{ env.DOCKERHUB_USERNAME }}" --password-stdin
docker compose down --remove-orphans
docker compose up --build -d
Loading