Skip to content

Commit

Permalink
Refactor deploy-development.yml and reload.sh for CI/CD performance (#…
Browse files Browse the repository at this point in the history
…535)

* Rollback deploy file to test with Github Hosted Runner

* Update branch name to push

* Add step to check default github workspace path

* Add path option for actions/checkout

* Delete unnecessary code

* Use bash instead of sh

* Get the latest changes from the branch

* Manage branch name with environment variable

* Use '&&' to ensure each step runs successfully

* Write branch name directly

* Fetch all branches from remote repository

* Update reload.sh to delete duplicate code and clarify roles

* Remove git reset and leave only git pull

* Reflect the changes so far in deployment-development.yml

* Delete the file for testing using Github Hosted Runner

* Delete code for checking github workspace path

* Reflect the changes so far in deployment-production-1.yml

* Reflect the changes so far in deployment-production-2.yml

* Reflect the changes so far in deployment-production.yml
  • Loading branch information
ChoHadam authored Jan 2, 2024
1 parent 966a101 commit adf7633
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 64 deletions.
14 changes: 9 additions & 5 deletions .github/workflows/deploy-development.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,17 @@ jobs:
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: 22
script: |
cp ~/config-injection/ecosystem-${{ env.SERVER_PROFILE }}.json ${{ env.PROJECT_PATH }}/ecosystem.json
cp ~/config-injection/envs/.env.${{ env.NODE_ENV }} ${{ env.PROJECT_PATH }}/.env
cd ${{ env.PROJECT_PATH }}
bash script/prebuild.sh
sh script/reload.sh
cp ~/config-injection/ecosystem-${{ env.SERVER_PROFILE }}.json ${{ env.PROJECT_PATH }}/ecosystem.json &&
cp ~/config-injection/envs/.env.${{ env.NODE_ENV }} ${{ env.PROJECT_PATH }}/.env &&
cd ${{ env.PROJECT_PATH }} &&
git fetch --all &&
git checkout ${{ env.BRANCH_NAME }} &&
git pull origin ${{ env.BRANCH_NAME }} &&
bash script/prebuild.sh &&
bash script/reload.sh
env:
BRANCH_NAME: dev
NODE_ENV: development
SERVER_PROFILE: development
PROJECT_PATH: ~/actions-runner/_work/A.fume.Server/A.fume.Server/development
44 changes: 27 additions & 17 deletions .github/workflows/deploy-production-1.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions

name: Deploy production-1 server to ec2

on:
Expand All @@ -10,28 +7,41 @@ on:
- production-1

jobs:
build:
runs-on: self-hosted
deploy:
runs-on: ubuntu-latest

strategy:
matrix:
node-version: [16.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
defaults:
run:
working-directory: ${{ env.SERVER_PROFILE }}

steps:
- uses: actions/checkout@v2
with:
path: ${{ env.SERVER_PROFILE }}
- name: Checkout Repository
uses: actions/checkout@v3

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- run: cp ~/config-injection/ecosystem-${{ env.SERVER_PROFILE }}.json ${{ env.PROJECT_PATH }}/ecosystem.json
- run: cp ~/config-injection/envs/.env.${{ env.NODE_ENV }} ${{ env.PROJECT_PATH }}/.env
- run: bash ${{ env.PROJECT_PATH }}/script/prebuild.sh
- run: sh ${{ env.PROJECT_PATH }}/script/reload.sh

- name: Deploy to EC2 using SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: 22
script: |
cp ~/config-injection/ecosystem-${{ env.SERVER_PROFILE }}.json ${{ env.PROJECT_PATH }}/ecosystem.json &&
cp ~/config-injection/envs/.env.${{ env.NODE_ENV }} ${{ env.PROJECT_PATH }}/.env &&
cd ${{ env.PROJECT_PATH }} &&
git fetch --all &&
git checkout ${{ env.BRANCH_NAME }} &&
git pull origin ${{ env.BRANCH_NAME }} &&
bash script/prebuild.sh &&
bash script/reload.sh
env:
BRANCH_NAME: production-1
NODE_ENV: production
SERVER_PROFILE: production-1
PROJECT_PATH: ~/actions-runner/_work/A.fume.Server/A.fume.Server/production-1
44 changes: 27 additions & 17 deletions .github/workflows/deploy-production-2.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions

name: Deploy production-2 server to ec2

on:
Expand All @@ -10,28 +7,41 @@ on:
- production-2

jobs:
build:
runs-on: self-hosted
deploy:
runs-on: ubuntu-latest

strategy:
matrix:
node-version: [16.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
defaults:
run:
working-directory: ${{ env.SERVER_PROFILE }}

steps:
- uses: actions/checkout@v2
with:
path: ${{ env.SERVER_PROFILE }}
- name: Checkout Repository
uses: actions/checkout@v3

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- run: cp ~/config-injection/ecosystem-${{ env.SERVER_PROFILE }}.json ${{ env.PROJECT_PATH }}/ecosystem.json
- run: cp ~/config-injection/envs/.env.${{ env.NODE_ENV }} ${{ env.PROJECT_PATH }}/.env
- run: bash ${{ env.PROJECT_PATH }}/script/prebuild.sh
- run: sh ${{ env.PROJECT_PATH }}/script/reload.sh

- name: Deploy to EC2 using SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: 22
script: |
cp ~/config-injection/ecosystem-${{ env.SERVER_PROFILE }}.json ${{ env.PROJECT_PATH }}/ecosystem.json &&
cp ~/config-injection/envs/.env.${{ env.NODE_ENV }} ${{ env.PROJECT_PATH }}/.env &&
cd ${{ env.PROJECT_PATH }} &&
git fetch --all &&
git checkout ${{ env.BRANCH_NAME }} &&
git pull origin ${{ env.BRANCH_NAME }} &&
bash script/prebuild.sh &&
bash script/reload.sh
env:
BRANCH_NAME: production-2
NODE_ENV: production
SERVER_PROFILE: production-2
PROJECT_PATH: ~/actions-runner/_work/A.fume.Server/A.fume.Server/production-2
45 changes: 28 additions & 17 deletions .github/workflows/deploy-production.yml
Original file line number Diff line number Diff line change
@@ -1,36 +1,47 @@
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions

name: Deploy production server to ec2

on:
workflow_dispatch:
push:
branches:
- main

jobs:
build:
runs-on: self-hosted
deploy:
runs-on: ubuntu-latest

strategy:
matrix:
node-version: [16.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
defaults:
run:
working-directory: ${{ env.SERVER_PROFILE }}

steps:
- uses: actions/checkout@v2
with:
path: ${{ env.SERVER_PROFILE }}
- name: Checkout Repository
uses: actions/checkout@v3

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- run: cp ~/config-injection/ecosystem-${{ env.SERVER_PROFILE }}.json ${{ env.PROJECT_PATH }}/ecosystem.json
- run: cp ~/config-injection/envs/.env.${{ env.NODE_ENV }} ${{ env.PROJECT_PATH }}/.env
- run: bash ${{ env.PROJECT_PATH }}/script/prebuild.sh
- run: sh ${{ env.PROJECT_PATH }}/script/reload.sh

- name: Deploy to EC2 using SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: 22
script: |
cp ~/config-injection/ecosystem-${{ env.SERVER_PROFILE }}.json ${{ env.PROJECT_PATH }}/ecosystem.json &&
cp ~/config-injection/envs/.env.${{ env.NODE_ENV }} ${{ env.PROJECT_PATH }}/.env &&
cd ${{ env.PROJECT_PATH }} &&
git fetch --all &&
git checkout ${{ env.BRANCH_NAME }} &&
git pull origin ${{ env.BRANCH_NAME }} &&
bash script/prebuild.sh &&
bash script/reload.sh
env:
BRANCH_NAME: main
NODE_ENV: production
SERVER_PROFILE: production
PROJECT_PATH: ~/actions-runner/_work/A.fume.Server/A.fume.Server/production
8 changes: 0 additions & 8 deletions script/reload.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,6 @@
# 에러 핸들링 추가
set -e

# ecosystem.json 파일이 존재하면 pm2로 실행 중인 프로세스를 중지
if [[ -f "ecosystem.json" ]]; then
pm2 stop ecosystem.json || true
fi

# npm run build 명령어로 프로젝트 빌드
npm run build || exit 1

# ecosystem.json 사용하여 pm2로 프로세스 재시작
if [[ -f "ecosystem.json" ]]; then
pm2 restart ecosystem.json || exit 1
Expand Down

0 comments on commit adf7633

Please sign in to comment.