๐ 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๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๋์ง ํ์ธํด๋ณด์.