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

[Deploy] jisungin.co.kr 배포 설정 #25

Merged
merged 4 commits into from
Mar 23, 2024
Merged
Changes from 1 commit
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
Prev Previous commit
Next Next commit
deploy: Github Actions Jobs 추가 (#19)
pdohyung committed Mar 23, 2024
commit cc9b9fb4a373afea80b6e7a71b0697f941cb7399
124 changes: 124 additions & 0 deletions .github/workflows/jisungin_dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
name: jisungin_dev

on:
push:
branches: [ "develop" ]
pull_request:
branches: [ "develop" ]

jobs:
develop:
# 실행 환경
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3

# JDK 17
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'

# Gradle Caching
- name: Gradle Caching
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-

# application-dev.yml
- name: Copy dev Secret
env:
DEV_SECRET: ${{ secrets.APPLICATION_DEV_YML }}
DEV_SECRET_DIR: src/main/resources
DEV_SECRET_DIR_FILE_NAME: application-dev.yml
run: echo $DEV_SECRET | base64 --decode >> $DEV_SECRET_DIR/$DEV_SECRET_DIR_FILE_NAME

# application-oauth.yml
- name: Copy oauth Secret
env:
DEV_SECRET: ${{ secrets.APPLICATION_OAUTH_YML }}
DEV_SECRET_DIR: src/main/resources
DEV_SECRET_DIR_FILE_NAME: application-oauth.yml
run: echo $DEV_SECRET | base64 --decode >> $DEV_SECRET_DIR/$DEV_SECRET_DIR_FILE_NAME

# application-jwt.yml
# - name: Copy jwt Secret
# env:
# DEV_SECRET: ${{ secrets.APPLICATION_JWT_YML }}
# DEV_SECRET_DIR: src/main/resources
# DEV_SECRET_DIR_FILE_NAME: application-jwt.yml
# run: echo $DEV_SECRET | base64 --decode >> $DEV_SECRET_DIR/$DEV_SECRET_DIR_FILE_NAME

# ./gradlew 권한 설정
- name: ./gradlew 권한 설정
run: chmod +x ./gradlew

# Gradle Build
- name: Build with Gradle
run: |
./gradlew clean
./gradlew compileJava
./gradlew build

# Docker Build하고 DockerHub에 Push
- name: Docker Build & Push to DockerHub
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -t ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }}:latest .
docker push ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO }}:latest

# GitHub IP를 요청
- name: Get GitHub IP
id: ip
uses: haythem/public-ip@v1.2

# AWS 세팅
- name: AWS Setting
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
aws-region: ap-northeast-2

# GitHub IP를 AWS에 추가
- name: Add GitHub IP to AWS
run: |
aws ec2 authorize-security-group-ingress --group-id ${{ secrets.AWS_SG_ID }} --protocol tcp --port 22 --cidr ${{ steps.ip.outputs.ipv4 }}/32

# docker-compose.yml 파일 EC2로 복사
- name: Copy docker-compose.yml to EC2
uses: appleboy/scp-action@master
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.KEY }}
port: 22
source: "./docker-compose.yml"
target: "./jisungin"

# SSH Key로 서버에 접속하고 docker-compose image를 pull 받고 실행하기
- name: Access Server with SSH Key, pull and execute docker-compose image
uses: appleboy/ssh-action@v0.1.6
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.KEY }}
port: 22
script: |
cd jisungin
sudo docker-compose down
sudo docker-compose pull
sudo docker-compose up -d
sudo docker image prune -f

# Security Group에서 Github IP를 삭제
- name: Remove Github IP From Security Group
run: |
aws ec2 revoke-security-group-ingress --group-id ${{ secrets.AWS_SG_ID }} --protocol tcp --port 22 --cidr ${{ steps.ip.outputs.ipv4 }}/32