๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋ก ํŠธ์—”๋“œ(Front-end)/Tools

Github Actions๋ž€ ๋ญ˜๊นŒ

by ์ฝ”์ž๋Š” ์•Œ๋ฐ”์ƒ 2025. 5. 26.

๋ชฉ์ฐจ

1. Github Actions๋ž€?

2. ์ž‘์„ฑ ์˜ˆ์‹œ

3. ๊ตฌ์„ฑ ์š”์†Œ ์ž์„ธํžˆ ๋ณด๊ธฐ

    3-1. Workflow

    3-2. Event

    3-3. Job

    3-4. Runner

    3-5. Step

    3-6. Action


1. Github Actions๋ž€?

Github์—์„œ ์ œ๊ณตํ•˜๋Š” ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” CI/CD ํ”Œ๋žซํผ

Github ์ €์žฅ์†Œ์— ์ด๋ฒคํŠธ(push, pr..)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฏธ๋ฆฌ ์ •์˜ํ•œ ์ž‘์—…(ํ…Œ์ŠคํŠธ-๋นŒ๋“œ-๋ฐฐํฌ..)์„ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•ด์ค€๋‹ค.

 

Github Actions์˜ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…
Workflow ์ž๋™ํ™” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ •์˜๋œ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋กœ, Github Actions์—์„œ ๊ฐ€์žฅ ์ตœ์ƒ์œ„ ๊ฐœ๋…์ด๋‹ค.
Event Workflow๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ํŠธ๋ฆฌ๊ฑฐ๋กœ, push/pull request์™€ ๊ฐ™์€ ๋™์ž‘์ด๋‹ค.
Job ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ž‘์—… ๋‹จ์œ„๋กœ, ๋ณ‘๋ ฌ/์ˆœ์ฐจ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค
Step Job ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ์„ธ๋ถ€ ์ž‘์—…์œผ๋กœ, ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰/์•ก์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.
Action Step์—์„œ ์‹คํ–‰ํ•˜๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ž‘์—…์œผ๋กœ, npm ์„ค์น˜/๋นŒ๋“œ/ํ…Œ์ŠคํŠธ ๋“ฑ์ด ์žˆ๋‹ค.
Runner workflow๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ์„œ๋ฒ„ ํ™˜๊ฒฝ์œผ, ๊ฐ runner๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ Job์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 


2. ์ž‘์„ฑ ์˜ˆ์‹œ

name: CI

on: [push, pull_request]

jobs:
	build:
    	runs-on: ubuntu-latest
        
        steps:
        	- uses: actions/checkout@v3
            - name: Use Node.js
              uses: actions/setup-node@v3
              with:
                  node-version: 18
                  
            - name: Install dependencies
              run: npm install
             
            - name: Run test
              run: npm test
  • push, pull_request ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์‹คํ–‰
  • ๋ฌด์—‡์„?
    • Node.js ํ™˜๊ฒฝ์—์„œ
    • npm install, npm test๋ฅผ ์ž๋™ ์‹คํ–‰

 


3. ๊ตฌ์„ฑ ์š”์†Œ ์ž์„ธํžˆ ๋ณด๊ธฐ

1. Workflow

์œ„์™€ ๊ฐ™์ด ์ž๋™ํ™”๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ์„œ์ด๋‹ค.

์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ด๋ฆ„์€ name ํ‚ค์›Œ๋“œ๋กœ ์ž‘์„ฑํ•œ๋‹ค.

 

2. Event

์ด๋ฒคํŠธ๋Š” on ํ‚ค์›Œ๋“œ์— ์˜ํ•ด ์ง€์ •๋œ๋‹ค.

on: [push, pull_request]

 

ํ˜น์€ ๋ธŒ๋žœ์น˜๊นŒ์ง€ ๋ช…์‹œํ•˜์—ฌ ๋” ์ •ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

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

 

 

3. Job

์œ„ ์˜ˆ์‹œ์—์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ–ˆ์ง€๋งŒ Job์˜ ๊ตฌ์„ฑ์š”์†Œ๋Š” ๋” ์žˆ๋‹ค.

ํ‚ค ์„ค๋ช…
name (์„ ํƒ) Job์˜ ์ด๋ฆ„. ์ƒ๋žตํ•˜๋ฉด ID๋กœ ํ‘œ์‹œ๋œ๋‹ค
runs-on Runner ์ง€์ • ํ‚ค์›Œ๋“œ์ด๋‹ค.
steps Job ๋‚ด์—์„œ ์‹คํ–‰ํ•  ์ž‘์—…๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ์ •์˜ํ•œ ๋ฐฐ์—ด๋กœ, ๊ฐ step์€ run์ด๋‚˜ uses๋กœ ์ •์˜๋œ๋‹ค.
needs (์„ ํƒ) ๋‹ค๋ฅธ Job์ด ์„ ํ–‰๋˜์–ด์•ผ ์ด Job์ด ์‹คํ–‰๋˜๋„๋ก ์„ ์ •ํ•œ๋‹ค. (์˜์กด์„ฑ ์ง€์ •)
์˜์กด์„ฑ์ด ์—†๋Š” Job๋“ค์€ ๋ชจ๋‘ ๋ณ‘๋ ฌ๋กœ ์‹œ์ž‘๋˜์–ด ์ฒ˜๋ฆฌ๋œ๋‹ค.
envs (์„ ํƒ) Job ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•œ๋‹ค.
defaults (์„ ํƒ) Step ๋‚ด ๊ธฐ๋ณธ ์„ค์ •๊ฐ’์„ ์ง€์ •ํ•œ๋‹ค. (ex. shell, working-directory ๋“ฑ)
if (์„ ํƒ) Job์˜์‹คํ–‰ ์กฐ๊ฑด์œผ๋กœ, ํŠน์ • ์กฐ๊ฑด์— Job์ด ์‹คํ–‰๋˜๋„๋ก ์ œ์–ดํ•œ๋‹ค.
timeout-minutes (์„ ํƒ) Job์ด ์‹คํ–‰๋  ์ตœ๋Œ€ ์‹œ๊ฐ„์œผ๋กœ, ์ดˆ๊ณผ ์‹œ ์ž๋™ ์ทจ์†Œ ๋œ๋‹ค
continue-on-error (์„ ํƒ) Job์ด ์‹คํŒจํ•ด๋„ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•  ์ง€ ์ง€์ •ํ•œ๋‹ค. (true / false)
jobs:
  build:
    name: Build Job
    runs-on: ubuntu-latest
    needs: test
    env:
      NODE_ENT: production
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        
           ...

 

 

4. Runner

Runner๋Š” runs-on ํ‚ค์›Œ๋“œ์— ์˜ํ•ด ์ง€์ •๋œ๋‹ค.

runner๋Š” Github Actions ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋จธ์‹ (๊ฐ€์ƒ๋จธ์‹ or ์ปจํ…Œ์ด๋„ˆ)์œผ๋กœ,

๋‘ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ๋‹ค.

 

Github host runner (๊ณต์‹ ์ œ๊ณต ๋Ÿฌ๋„ˆ)์˜ ๋Œ€ํ‘œ์ ์ธ ๊ฐ’๋“ค : 

์šด์˜์ฒด์ œ runs-on ๊ฐ’
Ubuntu Linux ubuntu-latest
ubuntu-22.04
ubuntu-20.04
ubuntu-18.04
Windows windows-latest
windows-2022
windows-2019
macOS macos-latest
macos-13
macos-12
macos-11

์ด๋ ‡๊ฒŒ ๋ฒ„์ „์„ ๋ช…์‹œํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค.

 

self hosted runner

์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๋Ÿฌ๋„ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง€์ •ํ•œ๋‹ค.

runs-on: [self-hosted, linux, x64]

์…€ํ”„ ํ˜ธ์Šคํ‹ฐ๋“œ ๋Ÿฌ๋„ˆ์ž„์„ ๋ช…์‹œํ•˜๋ฉฐ, OS, ์•„ํ‚คํ…์ฒ˜ ๋“ฑ ํƒœ๊ทธ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

5. Step

step์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์ด๋Ÿฐ ๊ฒƒ๋“ค์ด ์žˆ๋‹ค.

ํ‚ค ์„ค๋ช… ์šฉ๋„ ์˜ˆ์‹œ
name step์˜ ์ด๋ฆ„ ์ง€์ • ๋กœ๊ทธ/์‹คํ–‰ ๊ฒฐ๊ณผ์—์„œ ์‹๋ณ„์ด ์šฉ์ดํ•˜๋„๋ก ๋„์›€ name: Checkout repository
uses ์™ธ๋ถ€/์ปค์Šคํ…€ ์•ก์…˜ ํ˜ธ์ถœ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ์žฌ์‚ฌ์šฉ ์•ก์…˜์„ ์‹คํ–‰ uses: actions/checkout@v3
run ์…ธ๋ช…๋ น์–ด/์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๋ณต์žกํ•œ ์ž‘์—…์„ ์ง์ ‘ ์ปค๋งจ๋“œ๋กœ ์ˆ˜ํ–‰ - run: echo "Hello, world!"
with uses๋กœ ํ˜ธ์ถœํ•œ ์•ก์…˜์—
์ž…๋ ฅ๊ฐ’ ์ „๋‹ฌ
์•ก์…˜์˜ ์„ค์ •๊ฐ’/์˜ต์…˜ ์ง€์ • uses: actions/setup-node@v3
with:
  node-version: '16'
env ํ•ด๋‹น step์—์„œ ์‚ฌ์šฉํ• 
ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
step ๋‚ด ์…ธ๋ช…๋ น์ด๋‚˜
์•ก์…˜์—์„œ ์ฐธ์กฐํ•  ๋ณ€์ˆ˜ ์ง€์ •
run: echo $MY_VAR
env:
  MY_VAR: "value"
if ์กฐ๊ฑด์— ๋”ฐ๋ผ ์‹คํ–‰ ์—ฌ๋ถ€ ๊ฒฐ์ • ํŠน์ • ์กฐ๊ฑด์—์„œ๋งŒ step ์‹คํ–‰ํ•˜๋„๋ก ์ œ์–ด - run: echo "this runs only on main branch"
  if: github.ref == 'refs/heads/main'

 

 

6. Action

uses ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘” ์•ก์…˜์„ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ณ„๋„์˜ ์ €์žฅ์†Œ์—์„œ ๊ด€๋ฆฌ๋˜๋ฉฐ, ์›Œํฌํ”Œ๋กœ์šฐ ๋‚ด์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

 

 

์ฐธ๊ณ