Skip to content

Commit

Permalink
Merge pull request #207 from hyeeyoung/dev-mod-cicd
Browse files Browse the repository at this point in the history
product 용, dev 용 서버 분리를 위한 코드 수정
  • Loading branch information
hyejungg committed Sep 10, 2022
2 parents 8d70ff5 + 81924f6 commit d10a06a
Show file tree
Hide file tree
Showing 11 changed files with 266 additions and 105 deletions.
82 changes: 82 additions & 0 deletions .github/workflows/developDeploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: Server Development Server CI&CD Work Flow
on:
push:
branches:
- dev

jobs:
devlop_CICD:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.13.2] # 개발환경과 동일하게 맞춤

steps:
# 브랜치에 checkout해 코드를 가져온다
- name: Checkout source code.
uses: actions/checkout@v2

# node 설치 및 버전 확인한다.
- name: Node.js ${{ matrix.node-version }} install
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Check Npm -v
run: npm -v

# npm ci를 통해 npm install 진행
- name: Npm CI
run: npm ci

#lint 통과 확인
- name: Check ESLint
run: npm run lint

# .env 파일 생성
- name: Create .env file
run: |
touch .env
echo PORT=${{ secrets.PORT }} >> .env
echo DB_DEV_HOST=${{ secrets.DB_DEV_HOST }} >> .env
echo DB_DEV_USER=${{ secrets.DB_DEV_USER }} >> .env
echo DB_DEV_PASSWORD=${{ secrets.DB_DEV_PASSWORD }} >> .env
echo DB_DEV_NAME=${{ secrets.DB_DEV_NAME }} >> .env
echo DB_PORT=${{ secrets.DB_PORT }} >> .env
echo WISHBOARD_GMAIL_ID=${{ secrets.WISHBOARD_GMAIL_ID }} >> .env
echo WISHBOARD_GMAIL_PW=${{ secrets.WISHBOARD_GMAIL_PW }} >> .env
echo JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }} >> .env
echo SLACK_API_TOKEN=${{ secrets.SLACK_API_TOKEN }} >> .env
echo AWS_ACCESS_KEY=${{ secrets.AWS_S3_IMAGE_ACCESS_KEY }} >> .env
echo AWS_SECRET_KEY=${{ secrets.AWS_S3_IMAGE_SECRET_KEY }} >> .env
echo BUCKET_NAME=${{ secrets.AWS_S3_IMAGE_BUCKET_NAME }} >> .env
# 빌드하여 S3에 업로드
- name: Run build (dev)
run: |
npm run build --if-present
# S3에 빌드 파일 저장
- name: zip file
run: zip -r wishboard-dev.zip ./dist ./scripts ./appspec.yml

- name: AWS configure credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_DEPLOY_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_DEPLOY_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2

- name: upload to S3
run: aws s3 cp --region ap-northeast-2 ./wishboard-dev.zip s3://wishboard-dev-build/deploy/

- name: deploy with AWS codeDeploy
run: aws deploy create-deployment
--application-name wishboard-dev-codedeploy
--deployment-config-name CodeDeployDefault.OneAtATime
--deployment-group-name GROUP
--s3-location bucket=wishboard-dev-build,bundleType=zip,key=deploy/wishboard-dev.zip
62 changes: 62 additions & 0 deletions .github/workflows/prCheck.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Server PR Check Work Flow
on:
pull_request:
branches:
- main
- dev

jobs:
PR_Check:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.13.2] # 개발환경과 동일하게 맞춤

steps:
# 브랜치에 checkout해 코드를 가져온다
- name: Checkout source code.
uses: actions/checkout@v2

# node 설치 및 버전 확인한다.
- name: Node.js ${{ matrix.node-version }} install
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Check Npm -v
run: npm -v

# npm ci를 통해 npm install 진행
- name: Npm CI
run: npm ci

#lint 통과 확인
- name: Check ESLint
run: npm run lint

# .env 파일 생성
- name: Create .env file
run: |
touch .env
echo PORT=${{ secrets.PORT }} >> .env
echo DB_HOST=${{ secrets.DB_DEV_HOST }} >> .env
echo DB_USER=${{ secrets.DB_DEV_USER }} >> .env
echo DB_PASSWORD=${{ secrets.DB_DEV_PASSWORD }} >> .env
echo DB_NAME=${{ secrets.DB_DEV_NAME }} >> .env
echo DB_PORT=${{ secrets.DB_PORT }} >> .env
echo WISHBOARD_GMAIL_ID=${{ secrets.WISHBOARD_GMAIL_ID }} >> .env
echo WISHBOARD_GMAIL_PW=${{ secrets.WISHBOARD_GMAIL_PW }} >> .env
echo JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }} >> .env
echo SLACK_API_TOKEN=${{ secrets.SLACK_API_TOKEN }} >> .env
echo AWS_ACCESS_KEY=${{ secrets.AWS_S3_IMAGE_ACCESS_KEY }} >> .env
echo AWS_SECRET_KEY=${{ secrets.AWS_S3_IMAGE_SECRET_KEY }} >> .env
echo BUCKET_NAME=${{ secrets.AWS_S3_IMAGE_BUCKET_NAME }} >> .env
- name: Run build
run: |
echo NODE_ENV="development" >> .env
npm run build --if-present
Original file line number Diff line number Diff line change
@@ -1,18 +1,11 @@
# This workflow will do a clean install 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: ServerCICD
name: Server Production Server CI&CD Work Flow
on:
push:
branches:
- dev
pull_request:
branches:
- main
- dev

jobs:
CICD:
prod_CICD:
runs-on: ubuntu-latest
strategy:
matrix:
Expand Down Expand Up @@ -49,6 +42,7 @@ jobs:
echo DB_USER=${{ secrets.DB_USER }} >> .env
echo DB_PASSWORD=${{ secrets.DB_PASSWORD }} >> .env
echo DB_NAME=${{ secrets.DB_NAME }} >> .env
echo DB_PORT=${{ secrets.DB_PORT }} >> .env
echo WISHBOARD_GMAIL_ID=${{ secrets.WISHBOARD_GMAIL_ID }} >> .env
echo WISHBOARD_GMAIL_PW=${{ secrets.WISHBOARD_GMAIL_PW }} >> .env
Expand All @@ -61,21 +55,17 @@ jobs:
echo AWS_SECRET_KEY=${{ secrets.AWS_S3_IMAGE_SECRET_KEY }} >> .env
echo BUCKET_NAME=${{ secrets.AWS_S3_IMAGE_BUCKET_NAME }} >> .env
# main 브랜치에 대한 PR만 빌드하여 S3에 업로드
# 빌드하여 S3에 업로드
- name: Run build (main)
if: ${{ github.base_ref == 'main' }}
run: |
echo NODE_ENV="production" >> .env
npm run build:production --if-present
- name: Copy ecosystem.config.js
if: ${{ github.base_ref == 'main' }}
run: |
cp ./ecosystem.config.js ./dist
# aws s3에 빌드 파일 저장
# S3에 빌드 파일 저장
- name: Build file upload to S3 and PM2 script
if: ${{ github.base_ref == 'main' }}
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
Expand All @@ -84,41 +74,3 @@ jobs:
--recursive \
--region ap-northeast-2 \
dist s3://wishboard-server-build
#** artifact 저장 기한을 정했지만 요금 제한으로 job간 이동 없이 바로 업로드 하도록 코드 수정
# deploy:
# needs: build
# if: ${{ github.base_ref == 'main' }}
# runs-on: ubuntu-latest
# steps:
# # build job에서 빌드한 파일(./dist/server.js) 가져오기
# - name: Sharing files between jobs.
# uses: actions/download-artifact@v3
# with:
# name: dist
# # aws s3에 빌드 파일 저장
# # ** 파일 이름이 동일해서 알아서 덮임
# - name : Build file upload to S3 and PM2 script
# env:
# AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
# AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# run: |
# mkdir dist
# mv ecosystem.config.js server.js server.js.LICENSE.txt ./dist
# ls -al
# aws s3 cp \
# --recursive \
# --region ap-northeast-2 \
# dist s3://wishboard-server-build
# ** time out 문제로 우선 주석처리 후 직접 진행으로 변경
# # aws ec2에 접속
# - name : Connect and Build file download to EC2 and PM2 script
# uses: appleboy/ssh-action@master
# with:
# key: ${{ secrets.AWS_EC2_SSH_KEY }}
# host: ${{ secrets.AWS_HOST }}
# username: ${{ secrets.AWS_USRENAME }}
# script: |
# pwd
# cd ./wishboard-server-product
# ./pm2-deploy.sh
18 changes: 18 additions & 0 deletions appspec.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu/build
overwrite: yes

permissions:
- object: /home/ubuntu
pattern: '**'
owner: ubuntu
group: ubuntu

hooks:
AfterInstall:
- location: scripts/after-deploy.sh
timeout: 300
runas: ubuntu
45 changes: 14 additions & 31 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"main": "app.js",
"scripts": {
"lint": "eslint .",
"build": "webpack --config ./webpack.config.js --mode development",
"build:production": "webpack --config ./webpack.config.js --mode production",
"build": "webpack --config ./webpack.config.js --mode=development",
"build:production": "webpack --config ./webpack.prod.config.js --mode=production",
"start": "node dist/server.js"
},
"repository": {
Expand Down
10 changes: 10 additions & 0 deletions scripts/after-deploy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash
REPOSITORY=/home/ubuntu/build

cd $REPOSITORY

cd dist

sudo /usr/bin/pm2 del server

sudo /usr/bin/pm2 start server.js
Loading

0 comments on commit d10a06a

Please sign in to comment.