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...

ยฉ 2025, Built with Gatsby