GitHub Actions ๐ŸŽฌ

Lzhtkยท2025๋…„ 7์›” 5์ผ

์˜ค๋Š˜์€ GitHub Actions์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ํŠธ๋ฆฌ๊ฑฐ์™€ ๊ทธ ์œ ํ˜•์„ ์•Œ์•„๋ณด์ž โ•

  • GitHub Actions๋Š” ์ฝ”๋“œ ์ €์žฅ์†Œ์˜ ๋ณ€๊ฒฝ์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜์—ฌ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๋“ฑ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” CI/CD ๋„๊ตฌ์ด๋‹ค.
  • ์ด ์ž๋™ํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ํ•ต์‹ฌ ์š”์†Œ๊ฐ€ ๋ฐ”๋กœ Trigger์ด๋ฉฐ, ์˜ค๋Š˜์€ Github Actions์—์„œ ์ง€์›ํ•˜๋Š” ๋‹ค์–‘ํ•œ ํŠธ๋ฆฌ๊ฑฐ ์œ ํ˜•๊ณผ ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์•Œ์•„๋ณด์ž.

1. push โ–ถ

์ €์žฅ์†Œ ์ฝ”๋“œ๊ฐ€ ํ‘ธ์‰ฌ๋  ๋•Œ ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰

on:
  push:
    branches: [main]
  • ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ? ๐Ÿง
    • CI/CD ๊ธฐ๋ณธ ์‹œ๋‚˜๋ฆฌ์˜ค : main, release ๋ธŒ๋žœ์น˜๋กœ ์ฝ”๋“œ๊ฐ€ ํ‘ธ์‰ฌ๋˜๋ฉด ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ์‹คํ–‰
    • ๋ฒ„์ „ ํƒœ๊ทธ์— ๋ฐ˜์‘ํ•˜๋Š” ์ž๋™ ๋ฆด๋ฆฌ์ฆˆ
push:
  tags:
    - 'v*.*.*'

2. pull_request โฉ

PR์ด ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋  ๋•Œ ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰

on:
  pull_request:
    branches: [ main ]
  • ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ? ๐Ÿง
    • PR ์ œ์ถœ ์‹œ ์ž๋™ ํ…Œ์ŠคํŠธ ๋ฐ ์ฝ”๋“œ ํ’ˆ์งˆ ๊ฒ€์‚ฌ
    • PR ๋ณ‘ํ•ฉ ์ „ ์ƒํƒœ ์ฒดํฌ ( required check๋กœ ์„ค์ • ๊ฐ€๋Šฅ )
pull_request:
  types: [opened, synchronize, reopened]

3. workflow_dispatch ๐ŸŒŠ

์ˆ˜๋™์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ (UI ๋ฒ„ํŠผ ํด๋ฆญ)

on:
  workflow_dispatch:
    inputs:
      environment:
        description: '๋ฐฐํฌ ํ™˜๊ฒฝ'
        required: true
        default: 'dev'
  • ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ? ๐Ÿง
    • ์ˆ˜๋™ ๋ฐฐํฌ ์‹œ๋‚˜๋ฆฌ์˜ค ( ์šด์˜ํŒ€ ์Šน์ธ ํ›„ ๋ฐฐํฌ )
    • ํ…Œ์ŠคํŠธ/์šด์˜ ํ™˜๊ฒฝ ๋ถ„๊ธฐ์‹œ ๋ฐฐํฌ
    • ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋‹ค์–‘ํ•œ ๋™์ž‘ ์ œ์–ด ๊ฐ€๋Šฅ ( ex - dev, prod, v1.2.0 ๋“ฑ )

4. schedule ๐Ÿ•’

ํŠน์ • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ ( cron ๋ฐฉ์‹ )

on:
  schedule:
    - cron: '0 9 * * *' # ๋งค์ผ ์˜ค์ „ 9์‹œ UTC ์‹คํ–‰
  • ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ? ๐Ÿง
    • ๋งค์ผ ์ž๋™ ํ…Œ์ŠคํŠธ ์‹คํ–‰
    • ์ •๊ธฐ์ ์ธ ๋ฐฑ์—…/๋กœ๊ทธ ์ •๋ฆฌ
    • ์™ธ๋ถ€ API ๋™๊ธฐํ™” ์ฃผ๊ธฐ์  ์‹คํ–‰
    • ์ฐธ๊ณ ์‚ฌํ•ญ : GitHub Actions๋Š” UTC ๊ธฐ์ค€์œผ๋กœ ๋™์ž‘

5. workflow_call๐Ÿ›Ž

๋‹ค๋ฅธ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ํ•ด๋‹น ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋„๋ก ํ˜ธ์ถœ

on:
  workflow_call:
    inputs:
      service-name:
        required: true
        type: string
  • ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ? ๐Ÿง
    • ์ค‘๋ณต๋œ ํŒŒ์ดํ”„๋ผ์ธ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์žฌ์‚ฌ์šฉ
    • ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์—์„œ ๊ณตํ†ต ๋นŒ๋“œ ๋กœ์ง์„ ํ˜ธ์ถœํ•  ๋•Œ
    • ์ฐธ๊ณ ์‚ฌํ•ญ : ํ•ด๋‹น ํŠธ๋ฆฌ๊ฑฐ ์œ ํ˜•์€ ๋ชจ๋“ˆํ™”๋œ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์„ฑ์— ํ•„์ˆ˜์ ์ž„ โ—

6. workflow_run ๐Ÿƒโ€โ™€๏ธ

๋‹ค๋ฅธ ์›Œํฌ ํ”Œ๋กœ์šฐ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ์‹คํ–‰

on:
  workflow_run:
    workflows: ["CI"]
    types:
      - completed
  • ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ? ๐Ÿง
    • ํ…Œ์ŠคํŠธ ์›Œํฌํ”Œ๋กœ์šฐ ์„ฑ๊ณต ์ดํ›„์—๋งŒ ๋ฐฐํฌ ์‹คํ–‰
    • ๋ณด์•ˆ ์Šค์บ” โ†’ ๋นŒ๋“œ โ†’ ๋ฐฐํฌ์™€ ๊ฐ™์ด ๋‹จ๊ณ„๋ณ„ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ
    • ํ•˜๋‚˜์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํŒจ๊ฐ€ ๋‹ค์Œ ๋‹จ๊ณ„ ์‹คํ–‰์„ ๋ง‰์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

7. repository_dispatch โš™

์™ธ๋ถ€ ์‹œ์Šคํ…œ์—์„œ GitHub API๋กœ ์ด๋ฒคํŠธ ๋ฐœ์ƒ( Webhook ๊ธฐ๋ฐ˜ )

on:
  repository_dispatch:
    types: [external-trigger]
  • ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ? ๐Ÿง
    • ์™ธ๋ถ€ ์‹œ์Šคํ…œ์—์„œ GitHub Actions ์‹คํ–‰
    • ๋‹ค๋ฅธ ์„œ๋น„์Šค ์ด๋ฒคํŠธ์— ๋”ฐ๋ฅธ ์ž๋™ํ™”

8. ๊ธฐํƒ€ ํŠธ๋ฆฌ๊ฑฐ๋“ค

ํŠธ๋ฆฌ๊ฑฐ์„ค๋ช…ํ™œ์šฉ ์˜ˆ
release๋ฆด๋ฆฌ์ฆˆ ์ƒ์„ฑ/์ˆ˜์ • ์‹œ๋ฐฐํฌ ์ž๋™ํ™”, ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ ๋นŒ๋“œ
issues, issue_comment์ด์Šˆ/๋Œ“๊ธ€ ์ž‘์„ฑ ์‹œ์Šฌ๋ž™ ์•Œ๋ฆผ, ์ž๋™ ๋ผ๋ฒจ๋ง
fork, watch, star์ €์žฅ์†Œ ํ™œ๋™ ๊ฐ์ง€์ปค๋ฎค๋‹ˆํ‹ฐ ์•Œ๋ฆผ ์ž๋™ํ™”
deployment, deployment_status๋ฐฐํฌ ์‹œ์ž‘/์™„๋ฃŒ๋ฐฐํฌ ์ƒํƒœ ๋Œ€์‹œ๋ณด๋“œ ์—ฐ๋™
  • ์ด๋Ÿฌํ•œ ํŠธ๋ฆฌ๊ฑฐ ์œ ํ˜•์€ ํ•„ํ„ฐ๋ง ์กฐ๊ฑด ( ๋ธŒ๋žœ์น˜, ํƒœ๊ทธ, ๊ฒฝ๋กœ ๋“ฑ )๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๋” ์„ธ๋ฐ€ํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค์— ๋”ฐ๋ฅธ ํŠธ๋ฆฌ๊ฑฐ ์ •๋ฆฌ

์‹œ๋‚˜๋ฆฌ์˜ค์ ํ•ฉํ•œ ํŠธ๋ฆฌ๊ฑฐ
์ฝ”๋“œ ๋ณ€๊ฒฝ ์ž๋™ ๋นŒ๋“œ/ํ…Œ์ŠคํŠธpush, pull_request
PR ๋ณ‘ํ•ฉ ์ „ ์ž๋™ ๊ฒ€์ฆpull_request
์ˆ˜๋™ ๋ฐฐํฌworkflow_dispatch
์ฃผ๊ธฐ์  ์ž‘์—…schedule
์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ ์—ฐ๋™repository_dispatch
๊ณตํ†ต ์›Œํฌํ”Œ๋กœ์šฐ ์žฌ์‚ฌ์šฉworkflow_call

๋งˆ๋ฌด๋ฆฌ ๐Ÿ”š

์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ํŠธ๋ฆฌ๊ฑฐ ์„ค๊ณ„๊ฐ€ ํ•ต์‹ฌ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ํ•ด๋‹น ์—ฌ๋Ÿฌ ํŠธ๋ฆฌ๊ฑฐ ์œ ํ˜•๊ณผ ์‹œ๋‚˜๋ฆฌ์˜ค๋“ค์„ ์ˆ™๋‹ฌํ•˜์—ฌ ์ •๊ตํ•œ ์„ค๊ณ„๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•˜์ž โ—โ•

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2025๋…„ 7์›” 7์ผ

๋‹ค์–‘ํ•œ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ•˜์…จ๋„ค์š”~ ์ž˜ ์ฝ๊ณ  ๊ฐ‘๋‹ˆ๋‹ค :)

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ