Profile picture

[배포 가이드] Github Actions를 사용하여 배포 자동화하기 (1인 개발 단위)

JaehyoJJAng2023년 11월 22일

📋 Workflow 구성도

image


◾️ 배포 준비

이전에 [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가 정상적으로 실행됐는지 확인해보자.
image
image


Loading script...