Dev-ops

๐Ÿš€ GitHub Actions CI ์›Œํฌํ”Œ๋กœ

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

๐Ÿš€ GitHub Actions CI ์›Œํฌํ”Œ๋กœ์šฐ: ๊ตฌ์„ฑ๊ณผ ๋‹จ๊ณ„ ์™„๋ฒฝ ๊ฐ€์ด๋“œ

 

“GitHub Actions์„ ํ™œ์šฉํ•ด CI/CD ์ž๋™ํ™”๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ์‹ค์ „ ์˜ˆ์ œ๋ฅผ ์ •๋ฆฌํ•ด๋ณด์ž!”

๐Ÿ“Œ ๋ชฉ์ฐจ

 

1๏ธโƒฃ ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ ์ƒ์„ฑ

2๏ธโƒฃ ํŠธ๋ฆฌ๊ฑฐ ์ด๋ฒคํŠธ ์ •์˜

3๏ธโƒฃ ์ž‘์—…(Jobs) ๋ฐ ๋‹จ๊ณ„(Steps) ์ •์˜

4๏ธโƒฃ ์‹คํ–‰ ํ™˜๊ฒฝ ์ง€์ •

5๏ธโƒฃ CI/CD ์‹ค์ „ ์˜ˆ์ œ

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

1๏ธโƒฃ ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ ์ƒ์„ฑ

 

GitHub Actions์˜ CI/CD ํ”„๋กœ์„ธ์Šค๋Š” .github/workflows/ ํด๋” ๋‚ด๋ถ€์˜ YAML ํŒŒ์ผ์—์„œ ๊ด€๋ฆฌ๋œ๋‹ค.

 

๐Ÿ“Œ ๊ธฐ๋ณธ์ ์ธ ํŒŒ์ผ ๊ตฌ์กฐ

๐Ÿ“‚ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ
 โ”œโ”€โ”€ ๐Ÿ“‚ .github
 โ”‚    โ”œโ”€โ”€ ๐Ÿ“‚ workflows
 โ”‚    โ”‚    โ”œโ”€โ”€ ๐Ÿ”ง ci.yml  # CI/CD ์„ค์ • ํŒŒ์ผ

๐Ÿ“Œ ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ ์ƒ์„ฑ ๋ฐฉ๋ฒ•

 

1๏ธโƒฃ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— .github/workflows/ci.yml ํŒŒ์ผ ์ƒ์„ฑ

2๏ธโƒฃ YAML ํ˜•์‹์œผ๋กœ ์„ค์ •์„ ์ •์˜

name: CI Pipeline  # ์›Œํฌํ”Œ๋กœ์šฐ ์ด๋ฆ„

on: [push, pull_request]  # ์‹คํ–‰ ํŠธ๋ฆฌ๊ฑฐ (์ด๋ฒคํŠธ)

๐Ÿ’ก ํŒŒ์ผ ์ƒ์„ฑ ํ›„ GitHub์— Pushํ•˜๋ฉด ์ž๋™์œผ๋กœ ์‹คํ–‰๋œ๋‹ค!

2๏ธโƒฃ ํŠธ๋ฆฌ๊ฑฐ ์ด๋ฒคํŠธ ์ •์˜

 

์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ์„ค์ •ํ•œ๋‹ค.

 

๐Ÿ“Œ ์ฃผ์š” ํŠธ๋ฆฌ๊ฑฐ ์ด๋ฒคํŠธ

์ด๋ฒคํŠธ์„ค๋ช…

push ํŠน์ • ๋ธŒ๋žœ์น˜์— ์ฝ”๋“œ๊ฐ€ ํ‘ธ์‹œ๋  ๋•Œ ์‹คํ–‰
pull_request PR์ด ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋  ๋•Œ ์‹คํ–‰
schedule ํฌ๋ก  ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ํ™œ์šฉํ•œ ์ฃผ๊ธฐ์  ์‹คํ–‰
workflow_dispatch ์ˆ˜๋™ ์‹คํ–‰ ๋ฒ„ํŠผ ์ œ๊ณต
release ๋ฆด๋ฆฌ์ฆˆ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์‹คํ–‰

๐Ÿ“Œ ์˜ˆ์ œ: push, pull_request ํŠธ๋ฆฌ๊ฑฐ ์„ค์ •

on:
  push:
    branches:
      - main
      - develop
  pull_request:
    branches:
      - main

โœ… main ๋ฐ develop ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œ๋˜๊ฑฐ๋‚˜, PR์ด ์ƒ์„ฑ๋  ๋•Œ ์‹คํ–‰

3๏ธโƒฃ ์ž‘์—…(Jobs) ๋ฐ ๋‹จ๊ณ„(Steps) ์ •์˜

 

GitHub Actions์˜ ํ•ต์‹ฌ์€ ์ž‘์—…(Jobs)๊ณผ ๋‹จ๊ณ„(Steps) ์ด๋‹ค.

 

๐Ÿ“Œ Jobs: ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ๋‹จ์œ„

 

๊ฐ Job์€ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ, ๋ณ‘๋ ฌ ์‹คํ–‰ ๊ฐ€๋Šฅ

jobs:
  test-job:
    runs-on: ubuntu-latest
    steps:
      - name: Print Hello
        run: echo "Hello, GitHub Actions!"

๐Ÿ’ก ์—ฌ๋Ÿฌ ๊ฐœ์˜ Job์„ ์ •์˜ํ•˜๊ณ , needs ํ‚ค์›Œ๋“œ๋กœ Job ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์„ค์ • ๊ฐ€๋Šฅ!

๐Ÿ“Œ Steps: Job ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ์ž‘์—… ๋‹จ์œ„

 

Step์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ช…๋ น์–ด ์‹คํ–‰(run:) ๋˜๋Š” ์•ก์…˜ ์‚ฌ์šฉ(uses:) ์„ ํฌํ•จ

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3  # GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ฝ”๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ
      - name: Install dependencies
        run: npm install  # ์˜์กด์„ฑ ์„ค์น˜
      - name: Run tests
        run: npm test  # ํ…Œ์ŠคํŠธ ์‹คํ–‰

4๏ธโƒฃ ์‹คํ–‰ ํ™˜๊ฒฝ ์ง€์ • (runs-on)

 

GitHub Actions์€ ๋‹ค์–‘ํ•œ OS์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅ

๐Ÿ”น ubuntu-latest (๋ฆฌ๋ˆ…์Šค)

๐Ÿ”น windows-latest (์œˆ๋„์šฐ)

๐Ÿ”น macos-latest (๋งฅ)

 

๐Ÿ“Œ ์˜ˆ์ œ: OS๋ณ„ ์‹คํ–‰

jobs:
  test:
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]  # ๋‹ค์ค‘ OS ํ…Œ์ŠคํŠธ
    runs-on: ${{ matrix.os }}
    steps:
      - name: Run Node.js Test
        run: npm test

โœ… Ubuntu, MacOS, Windows์—์„œ ๋™์‹œ์— ํ…Œ์ŠคํŠธ ์‹คํ–‰!

5๏ธโƒฃ CI/CD ์‹ค์ „ ์˜ˆ์ œ

 

๐Ÿ“Œ 1๏ธโƒฃ Node.js ํ”„๋กœ์ ํŠธ์—์„œ CI ์‹คํ–‰

name: Node.js CI

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 16

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: npm test

โœ… Node.js 16 ํ™˜๊ฒฝ์—์„œ ํ”„๋กœ์ ํŠธ ํ…Œ์ŠคํŠธ ์‹คํ–‰!

๐Ÿ“Œ 2๏ธโƒฃ React ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ๋ฐ Lint ํ…Œ์ŠคํŠธ

name: React CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  build-and-test:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Install dependencies
        run: npm ci

      - name: Run ESLint
        run: npm run lint  # ๋ฆฐํŠธ ๊ฒ€์‚ฌ ์‹คํ–‰

      - name: Run Unit Tests
        run: npm test  # ํ…Œ์ŠคํŠธ ์‹คํ–‰

      - name: Build Project
        run: npm run build  # ๋นŒ๋“œ ์‹คํ–‰

โœ… ESLint ๊ฒ€์‚ฌ & ์œ ๋‹› ํ…Œ์ŠคํŠธ ์‹คํ–‰ ํ›„ React ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ!

๐ŸŽฏ ๊ฒฐ๋ก : GitHub Actions, ์ด๋ ‡๊ฒŒ ํ™œ์šฉํ•˜์ž!

 

โœ… GitHub Actions์„ ํ™œ์šฉํ•˜๋ฉด CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ์‰ฝ๊ฒŒ ๊ตฌ์ถ• ๊ฐ€๋Šฅ!

โœ… YAML ๊ธฐ๋ฐ˜์œผ๋กœ ์ง๊ด€์ ์ธ ์„ค์ • ๊ฐ€๋Šฅ!

โœ… ๋‹ค์–‘ํ•œ OS ํ™˜๊ฒฝ์—์„œ ๋ณ‘๋ ฌ ์‹คํ–‰ ๊ฐ€๋Šฅ!

โœ… CI/CD ์ž๋™ํ™”๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ํšจ์œจํ™” ๊ฐ€๋Šฅ!

 

๐Ÿš€ “์ด์ œ GitHub Actions๋กœ ์ž๋™ํ™”๋œ CI/CD ๊ตฌ์ถ•์— ๋„์ „ํ•ด๋ณด์ž!” ๐Ÿš€

 

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

728x90
๋ฐ˜์‘ํ˜•