Dev-ops

๐Ÿš€ GitHub Actions ์™„๋ฒฝ ๊ฐ€์ด๋“œ

xeunnie 2025. 3. 26. 01:00
728x90
๋ฐ˜์‘ํ˜•

๐Ÿš€ GitHub Actions ์™„๋ฒฝ ๊ฐ€์ด๋“œ: CI/CD ์ž๋™ํ™”์˜ ์‹œ์ž‘!

 

“GitHub Actions์ด ๋ญ”์ง€, ์™œ ์จ์•ผ ํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€๋ฅผ ์ƒ์„ธํžˆ ํŒŒํ—ค์ณ ๋ณด์ž!”

๐Ÿ“Œ ๋ชฉ์ฐจ

 

1๏ธโƒฃ GitHub Actions๋ž€?

2๏ธโƒฃ GitHub Actions์˜ ํŠน์ง•

3๏ธโƒฃ GitHub Actions ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์กฐ

4๏ธโƒฃ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ (์ด๋ฒคํŠธ, ์ž‘์—…, ๋‹จ๊ณ„, ์•ก์…˜, ๋Ÿฌ๋„ˆ)

5๏ธโƒฃ GitHub Actions ์ฃผ์š” ๋ฌธ๋ฒ• ๋ฐ ์˜ˆ์ œ

6๏ธโƒฃ ๊ฒฐ๋ก 

1๏ธโƒฃ GitHub Actions๋ž€?

 

GitHub Actions๋Š” GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ CI/CD ์ž๋™ํ™”๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์›Œํฌํ”Œ๋กœ์šฐ ๊ธฐ๋ฐ˜์˜ ์ž๋™ํ™” ๋„๊ตฌ์ด๋‹ค.

๐Ÿ”น ์ฝ”๋“œ ํ‘ธ์‹œ, PR, ๋จธ์ง€, ์ด์Šˆ ์ƒ์„ฑ ๋“ฑ ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ

๐Ÿ”น YAML ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค์ • ๊ฐ€๋Šฅ

๐Ÿ”น GitHub ๋‚ด์—์„œ ์ง์ ‘ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ถ”๊ฐ€ ์„ค์ • ์—†์ด ์‰ฝ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

๐Ÿ’ก ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด?

โœ”๏ธ “์ฝ”๋“œ๊ฐ€ push๋˜๋ฉด ํ…Œ์ŠคํŠธ & ๋ฐฐํฌ ์ž๋™ ์‹คํ–‰ํ•ด์ค˜!”

โœ”๏ธ “PR์ด ์˜ฌ๋ผ์˜ค๋ฉด ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์ „์— lint ๊ฒ€์‚ฌ๋ฅผ ์ž๋™์œผ๋กœ ๋Œ๋ ค์ค˜!”

โœ”๏ธ “๋ฒ„๊ทธ ์ด์Šˆ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด Slack์— ์•Œ๋ฆผ์„ ๋ณด๋‚ด์ค˜!”

2๏ธโƒฃ GitHub Actions์˜ ํŠน์ง•

 

โœ… GitHub ๋„ค์ดํ‹ฐ๋ธŒ ํ†ตํ•ฉ

โœ”๏ธ GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์™€ ๊ธด๋ฐ€ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉฐ, PR, ์ด์Šˆ, ํ‘ธ์‹œ ๋“ฑ์˜ ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ ๊ฐ€๋Šฅ

 

โœ… YAML ๊ธฐ๋ฐ˜ ์„ค์ •

โœ”๏ธ .github/workflows/ ๋””๋ ‰ํ„ฐ๋ฆฌ์— YAML ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ„ํŽธํ•˜๊ฒŒ ์›Œํฌํ”Œ๋กœ์šฐ ์ž‘์„ฑ

 

โœ… ๋ฉ€ํ‹ฐ OS ๋ฐ ํ™˜๊ฒฝ ์ง€์›

โœ”๏ธ Linux, Windows, macOS์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅ (runs-on: ubuntu-latest ๋“ฑ)

โœ”๏ธ ์ž์ฒด ํ˜ธ์ŠคํŒ… ๋Ÿฌ๋„ˆ(Self-hosted Runner)๋„ ๊ฐ€๋Šฅ

 

โœ… ๋ณ‘๋ ฌ ์‹คํ–‰ ๋ฐ ๋งคํŠธ๋ฆญ์Šค ์ „๋žต ์ง€์›

โœ”๏ธ ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์—์„œ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ (matrix๋ฅผ ํ™œ์šฉํ•œ ๋‹ค์–‘ํ•œ Node.js ๋ฒ„์ „ ํ…Œ์ŠคํŠธ)

 

โœ… ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค ์ง€์›

โœ”๏ธ GitHub Actions Marketplace์—์„œ ๋‹ค์–‘ํ•œ ์•ก์…˜ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ (uses: ํ™œ์šฉ)

 

โœ… ๋น„์šฉ ํšจ์œจ์ 

โœ”๏ธ GitHub์—์„œ ๊ธฐ๋ณธ ์ œ๊ณต (ํผ๋ธ”๋ฆญ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋Š” ๋ฌด๋ฃŒ, ๊ฐœ์ธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋Š” ๋ฌด๋ฃŒ ์ œํ•œ ์žˆ์Œ)

3๏ธโƒฃ GitHub Actions ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์กฐ

 

GitHub Actions์€ ์›Œํฌํ”Œ๋กœ์šฐ(Workflow) ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.

๐Ÿ”น ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ **์ž‘์—…(Job)**์œผ๋กœ ๊ตฌ์„ฑ

๐Ÿ”น ์ž‘์—…(Job)์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ **๋‹จ๊ณ„(Step)**์„ ๊ฐ€์ง

๐Ÿ”น ๋‹จ๊ณ„(Step)๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ **์•ก์…˜(Action)**์„ ์‹คํ–‰

 

๐Ÿ“Œ GitHub Actions ์‹คํ–‰ ํ๋ฆ„

๐Ÿ“‚ .github/workflows/
  โ”œโ”€โ”€ ๐Ÿ”ง my-workflow.yml
name: My CI Workflow  # ์›Œํฌํ”Œ๋กœ์šฐ ์ด๋ฆ„
on: push              # ํ‘ธ์‹œ๋  ๋•Œ ์‹คํ–‰

jobs:
  test:               # ์ž‘์—…(Job) ์ด๋ฆ„
    runs-on: ubuntu-latest  # ์‹คํ–‰ ํ™˜๊ฒฝ
    steps:            # ๋‹จ๊ณ„(Steps)
      - name: Checkout repository
        uses: actions/checkout@v3  # ์•ก์…˜ ์‚ฌ์šฉ
      - name: Run test
        run: npm test  # ์ปค๋งจ๋“œ ์‹คํ–‰

4๏ธโƒฃ GitHub Actions ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

 

๐ŸŸข 1. ์ด๋ฒคํŠธ (Event)

 

์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ํŠธ๋ฆฌ๊ฑฐ(Trigger) ์—ญํ• ์„ ํ•œ๋‹ค.

๐Ÿ”น ์ฝ”๋“œ ํ‘ธ์‹œ (push)

๐Ÿ”น PR ์ƒ์„ฑ (pull_request)

๐Ÿ”น ์ด์Šˆ ์ƒ์„ฑ (issues)

๐Ÿ”น ํŠน์ • ์‹œ๊ฐ„๋งˆ๋‹ค ์‹คํ–‰ (schedule)

on:
  push:
    branches:
      - main

๐ŸŸก 2. ์ž‘์—… (Job)

 

๊ฐ Job์€ ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ๋‹จ์œ„์ด๋ฉฐ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ Job์„ ํ•˜๋‚˜์˜ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”น ์—ฌ๋Ÿฌ Job์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ

๐Ÿ”น Job ๊ฐ„ ์˜์กด ๊ด€๊ณ„ ์„ค์ • ๊ฐ€๋Šฅ (needs:)

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Build Project
        run: npm run build

๐ŸŸ  3. ๋‹จ๊ณ„ (Step)

 

๊ฐ Job ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ์ž‘์—… ๋‹จ์œ„

๐Ÿ”น ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๊ฐ€๋Šฅ (run:)

๐Ÿ”น ์•ก์…˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (uses:)

steps:
  - name: Checkout code
    uses: actions/checkout@v3
  - name: Install dependencies
    run: npm install

๐Ÿ”ต 4. ์•ก์…˜ (Action)

 

GitHub Actions์—์„œ ์ œ๊ณตํ•˜๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ž‘์—… ๋‹จ์œ„

๐Ÿ”น ๊ณต์‹ ์•ก์…˜ ๋˜๋Š” ์ปค์Šคํ…€ ์•ก์…˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

uses: actions/setup-node@v3
with:
  node-version: '16'

๐ŸŸฃ 5. ๋Ÿฌ๋„ˆ (Runner)

 

GitHub Actions์ด ์‹คํ–‰๋˜๋Š” ์„œ๋ฒ„ ํ™˜๊ฒฝ

๐Ÿ”น GitHub์—์„œ ์ œ๊ณตํ•˜๋Š” ํ˜ธ์ŠคํŒ… ๋Ÿฌ๋„ˆ (runs-on: ubuntu-latest)

๐Ÿ”น ์ง์ ‘ ์„ค์ • ๊ฐ€๋Šฅํ•œ ์…€ํ”„ ํ˜ธ์ŠคํŒ… ๋Ÿฌ๋„ˆ (self-hosted)

runs-on: ubuntu-latest

5๏ธโƒฃ GitHub Actions ์ฃผ์š” ๋ฌธ๋ฒ• ๋ฐ ์˜ˆ์ œ

 

1๏ธโƒฃ PR์ด ์ƒ์„ฑ๋  ๋•Œ Lint & Test ์‹คํ–‰

name: Lint and Test

on:
  pull_request:
    branches: [main]

jobs:
  lint-test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      - name: Install dependencies
        run: npm install
      - name: Run Lint
        run: npm run lint
      - name: Run Tests
        run: npm test

2๏ธโƒฃ ๋‹ค์ค‘ OS & Node.js ๋ฒ„์ „์—์„œ ํ…Œ์ŠคํŠธ ์‹คํ–‰ (Matrix Strategy)

name: Matrix Test

on: push

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [14, 16, 18]
        os: [ubuntu-latest, windows-latest]

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
      - name: Install dependencies
        run: npm install
      - name: Run Tests
        run: npm test

3๏ธโƒฃ ๋งค์ผ ์˜ค์ „ 6์‹œ์— ์ž๋™ ์‹คํ–‰ (Cron Schedule)

name: Daily Job

on:
  schedule:
    - cron: "0 6 * * *"  # UTC ๊ธฐ์ค€ ์˜ค์ „ 6์‹œ ์‹คํ–‰ (ํ•œ๊ตญ ์‹œ๊ฐ„ ์˜คํ›„ 3์‹œ)

jobs:
  run-scheduled-task:
    runs-on: ubuntu-latest
    steps:
      - name: Run Scheduled Task
        run: echo "Running scheduled task!"

๐ŸŽฏ ๊ฒฐ๋ก : GitHub Actions, ์™œ ์จ์•ผ ํ• ๊นŒ?

 

โœ… GitHub ๋„ค์ดํ‹ฐ๋ธŒ ์ง€์› → ์„ค์ •์ด ๊ฐ„ํŽธํ•˜๋‹ค

โœ… YAML ๊ธฐ๋ฐ˜ → ์ง๊ด€์ ์ธ ์›Œํฌํ”Œ๋กœ์šฐ ์ž‘์„ฑ ๊ฐ€๋Šฅ

โœ… GitHub Marketplace ํ™œ์šฉ → ๋‹ค์–‘ํ•œ ์•ก์…˜ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ

โœ… ๋ณ‘๋ ฌ ์‹คํ–‰ & ๋งคํŠธ๋ฆญ์Šค ์ „๋žต → ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ์ตœ์ ํ™” ๊ฐ€๋Šฅ

โœ… ๋ฌด๋ฃŒ ํ”Œ๋žœ ์ œ๊ณต (ํผ๋ธ”๋ฆญ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ)

 

“GitHub Actions๋ฅผ ํ™œ์šฉํ•˜์—ฌ, ํšจ์œจ์ ์ธ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•ด๋ณด์„ธ์š”!” ๐Ÿš€

 

๐ŸŒท ์ „์„ค์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ด…์‹œ๋‹น! ๐ŸŒท

728x90
๋ฐ˜์‘ํ˜•