📋 Workflow 구성도
◾️ 배포 준비
이전에 [Deploy] 가상서버(Virtual Machine)에 node API 배포하기 - AWS Lightsail 프로젝트에서 진행했던 express 앱을 그대로 사용할 것이다.
1. dev 브랜치 삭제
그리고 이전에 dev 브랜치로 작업을 했었기에 main 브랜치로 checkout 하고 dev 브랜치는 날려버릴거다.
(혹시 dev 브랜치에서 작업하던 것이 있었다면 push -> PR 후 main 브랜치로 merge 과정을 거쳐야 한다.)
$ git checkout main
$ git branch -D dev
$ git pull origin main
2. workflow
2-1. workflow 작성
현재 프로젝트 경로에 .github/workflows/testAndDeploy.yaml
파일을 만들자.
$ mkdir -p .github/workflows
$ touch .github/workflows/testAndDeploy.yaml
workflow를 작성해보자.
name: testAndDeploy
on:
push:
branches:
- main
jobs:
test_job:
runs-on: ubuntu-22.04
steps:
- name: "[Test] 1. Checkout repository"
uses: actions/checkout@v3
- name: "[Test] 2. Node.js Setup"
uses: actions/setup-node@v3
with:
node-version: "18"
- name: "[Test] 3. Install npm packages"
run: npm ci
- name: "[Test] 4. Install and run redis-server"
run: |
sudo apt-get update -y
sudo apt-get install -y redis-server
redis-server --daemonize yes --requirepass test_env --port 6380
- name: "[Test] 5. Run test"
run: npm run test:ci
- name: "[Test] 6. test build"
run: npm run build
deploy_job:
runs-on: ubuntu-22.04
needs: test_job
steps:
- name: "[Deploy] 1. Set up SSH"
run: |
mkdir -p ~/.ssh/
echo {% raw %} "${{ secrets.SSH_PRIVATE_KEY }}" {% endraw %} | tee ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
- name: "[Deploy] 2. Set up Known hosts"
run: |
echo {% raw %} "${{ secrets.SSH_KNOWN_HOST }}" {% endraw %} | tee -a ~/.ssh/known_hosts
chmod 644 ~/.ssh/known_hosts
- name: "[Deploy] 3. SSH and Deploy"
run: |
ssh -i ~/.ssh/id_rsa {% raw %} ${{ secrets.SSH_USERNAME }}@${{ secrets.SSH_PUBLIC_IP }} {% endraw %} "
cd express
sudo bash scripts/kill-app.sh
git pull
npm install
npm run build
sudo nohup npm run start 1>/dev/null 2>&1 & npx wait-on http://localhost:4000
"
jobs.deploy_job.needs
: test_job이 성공한 경우에만 deploy_job이 실행되도록 함.
2-2. workflow 배포
workflow 작성이 다 끝났으면 main 브랜치에서 commit & push
git add .
git commit -m "created testAndDeploy.yaml"
git push -u origin main
actions 탭으로 이동하여 workflow가 정상적으로 실행됐는지 확인해보자.