Skip to content

feat: #43/Git Actions를 이용한 CICD 적용 #1

feat: #43/Git Actions를 이용한 CICD 적용

feat: #43/Git Actions를 이용한 CICD 적용 #1

Workflow file for this run

name: Deploy Server
on:
push:
branches:
- develop-back
- main
- feature/#43/CICD
permissions:
contents: read
jobs:
setup-env:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Create env file
run: |
echo DB_ENDPOINT=${{ secrets.DB_ENDPOINT }} >> .env
echo DB_NAME=${{ secrets.DB_NAME }} >> .env
echo DB_PORT=${{ secrets.DB_PORT }} >> .env
echo MYSQL_USERNAME=${{ secrets.MYSQL_USERNAME }} >> .env
echo MYSQL_PASSWORD=${{ secrets.MYSQL_PASSWORD }} >> .env
echo JWT_SECRET=${{ secrets.JWT_SECRET }} >> .env
echo JWT_ACCESS_EXPIRATION_TIME=${{ secrets.JWT_ACCESS_EXPIRATION_TIME }} >> .env
echo JWT_REFRESH_EXPIRATION_TIME=${{ secrets.JWT_REFRESH_EXPIRATION_TIME }} >> .env
echo MAIL_PASSWORD=${{ secrets.MAIL_PASSWORD }} >> .env
echo MAIL_USERNAME=${{ secrets.MAIL_USERNAME }} >> .env
echo OAUTH2_GOOGLE_CLIENT_ID=${{ secrets.OAUTH2_GOOGLE_CLIENT_ID }} >> .env
echo OAUTH2_GOOGLE_CLIENT_SECRET=${{ secrets.OAUTH2_GOOGLE_CLIENT_SECRET }} >> .env
echo OAUTH2_GOOGLE_REDIRECT_URI=${{ secrets.OAUTH2_GOOGLE_REDIRECT_URI }} >> .env
echo REDIS_HOST=${{ secrets.REDIS_HOST }} >> .env
echo OAUTH_GOOGLE_DEFAULT_REDIRECT_URI=${{ secrets.OAUTH_GOOGLE_DEFAULT_REDIRECT_URI }} >> .env
echo AWS_ACCESS_KEY=${{ secrets.AWS_ACCESS_KEY }} >> .env
echo AWS_BUCKET=${{ secrets.AWS_BUCKET }} >> .env
echo AWS_REGION=${{ secrets.AWS_REGION }} >> .env
echo AWS_SECRET_KEY=${{ secrets.AWS_SECRET_KEY }} >> .env
- name: Copy .env to EC2
uses: appleboy/scp-action@master
with:
host: ${{ secrets.AWS_HOST }}
username: ubuntu
key: ${{ secrets.AWS_KEY }}
source: "./.env"
target: "capstone"
- name: Copy docker-compose.yaml to EC2
uses: appleboy/scp-action@master
with:
host: ${{ secrets.AWS_HOST }}
username: ubuntu
key: ${{ secrets.AWS_KEY }}
source: "./docker-compose.yml"
target: "capstone"
build-spring:
runs-on: ubuntu-latest
needs: setup-env
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push Spring
uses: docker/build-push-action@v5
with:
context: ./back
push: true
tags: ${{ secrets.DOCKER_REPO }}/eum-spring:latest
cache-from: type=gha
cache-to: type=gha,mode=max
build-nginx:
runs-on: ubuntu-latest
needs: setup-env
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push Nginx
uses: docker/build-push-action@v5
with:
context: ./back/nginx
push: true
tags: ${{ secrets.DOCKER_REPO }}/eum-nginx:latest
cache-from: type=gha
cache-to: type=gha,mode=max
deploy:
runs-on: ubuntu-latest
needs: [ build-spring, build-nginx ]
steps:
- name: executing remote ssh commands using password
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.AWS_HOST }}
username: ubuntu
key: ${{ secrets.AWS_KEY }}
script: |
if [ "$(sudo docker ps -qa)" ]; then
sudo docker rm -f $(sudo docker ps -qa)
fi
sudo docker pull ${{ secrets.DOCKER_REPO }}/eum-spring:latest
sudo docker pull ${{ secrets.DOCKER_REPO }}/eum-nginx:latest
sudo docker compose -f capstone/docker-compose.yml up -d
sudo docker image prune -f