๋ฐ˜์‘ํ˜•

 

 

Github Actions์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

 

์ผ๋‹จ Github Actions๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” CI/CD ๋„๊ตฌ์ž„

=> ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๋“ฑ์˜ ์ž‘์—…์„ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ

 

Github Actions๋Š”  Github ๋‚ด์—์„œ ๋ฐ”๋กœ ์‹คํ–‰๋˜๊ธฐ์— ์ถ”๊ฐ€ ์„ค์ •์ด ์ ์–ด ๋‚œ์ด๋„๊ฐ€ ๋น„๊ต์  ์‰ฝ๊ณ  

PR์ด๋‚˜ ์ปค๋ฐ‹, ์ด์Šˆ, ํƒœ๊ทธ ๋“ฑ ๋‹ค์–‘ํ•œ Github์˜ ์ด๋ฒคํŠธ์— ๋ฐ˜์‘์ด ๊ฐ€๋Šฅํ•จ!

(ํผ๋ธ”๋ฆญ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๊ธฐ์ค€์œผ๋กœ ๋ฌด๋ฃŒ์ž„)

 

๊ตฌ์„ฑ ์š”์†Œ

 

์šฐ์„  ํ•œ ๋ฒˆ ์ญ‰ ์ฝ์–ด๋ณด๊ณ  ๋ฐ‘์˜ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์ดํ•ด๊ฐ€ ๋” ์‰ฌ์›€

 

Workflow

 

Github Actions์—์„œ ์‹คํ–‰๋˜๋Š” ์ž๋™ํ™”๋œ ํ”„๋กœ์„ธ์Šค๋กœ .github/workflows/ ๋””๋ ‰ํ† ๋ฆฌ์— .yml ํŒŒ์ผ๋กœ ์ •์˜๋จ

=> ํ•˜๋‚˜ ์ด์ƒ์˜ Job์œผ๋กœ ๊ตฌ์„ฑ๋˜๊ณ  push, pull_request์™€ ๊ฐ™์€ ํŠน์ • ์ด๋ฒคํŠธ์— ์˜ํ•ด ์‹คํ–‰๋จ

 

Job

 

Workflow ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ๋…๋ฆฝ์ ์ธ ์ž‘์—… ๋‹จ์œ„๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Step์œผ๋กœ ๊ตฌ์„ฑ๋จ

 

=> ์„œ๋กœ ๋‹ค๋ฅธ Job์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜์ง€๋งŒ, needs ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • Job์ด ๋๋‚œ ํ›„ ์‹คํ–‰๋˜๋„๋ก ์˜์กด ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ

 

 

Step

 

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

 

=> ์‹คํ–‰ํ•  ๋ช…๋ น์–ด๋ฅผ ํฌํ•จํ•˜๊ฑฐ๋‚˜ Action์„ ์‚ฌ์šฉํ•  ์ˆ˜ ๋„ ์žˆ์Œ

 

 

Action

 

Step์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ณ„์ ์ธ ์‹คํ–‰ ๋‹จ์œ„์ž„

=> GitHub์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ณต์‹ Action์„ ์‚ฌ์šฉํ•  ์ˆ˜ ๋„ ์žˆ๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋งŒ๋“  Action ํ˜น์€ ์ง์ ‘ ๋งŒ๋“  Action๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

 

Runner

 

Job์„ ์‹คํ–‰ํ•˜๋Š” ๊ฐ€์ƒ ๋จธ์‹  ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ์ž„

 

=> GitHub์—์„œ ์ œ๊ณตํ•˜๋Š” GitHub-hosted runner๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ๋„ ์žˆ๊ณ  self-hosted runner(์ž์ฒด ํ˜ธ์ŠคํŒ… ํ™˜๊ฒฝ)์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ๋„ ์žˆ์Œ

 

(Github Actions๋Š” ubuntu, windows, macos ๋“ฑ์˜ ๋‹ค์–‘ํ•œ Runner๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Œ!!)

 

 

์˜ˆ์ œ ์ฝ”๋“œ

 

name: Spring Boot CI/CD  # Workflow ์ด๋ฆ„

on:
  push:
    branches:
      - main  # main ๋ธŒ๋žœ์น˜์— push๋  ๋•Œ ์‹คํ–‰

jobs:
  build: # ์ฒซ ๋ฒˆ์งธ Job
    runs-on: ubuntu-latest  # Runner (Ubuntu ์‚ฌ์šฉ)

    steps:
      - name: ์ฝ”๋“œ ์ฒดํฌ์•„์›ƒ # (GitHub Actions Runner์— ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ์†Œ์Šค ์ฝ”๋“œ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •์ž„)
        uses: actions/checkout@v4  # ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ฝ”๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ 
        #(actions/checkout์€ ์ด ๊ณผ์ •์„ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณต์‹ GitHub Action์ž„ @v4๋Š” ๋ฒ„์ „)

      - name: JDK 17 ์„ค์น˜
        uses: actions/setup-java@v3  # OpenJDK 17 ์„ค์น˜
        # actions/setup-java๋Š” Java ํ™˜๊ฒฝ(JDK)๋ฅผ ์„ค์ •ํ•˜๋Š” ์—ญํ• 
        with:
          distribution: 'temurin' # OpenJDK ๊ธฐ๋ฐ˜์˜ ๋ฌด๋ฃŒ JDK ๋ฐฐํฌํŒ
          java-version: '17'

      - name: Gradle ์‹คํ–‰ํ•˜์—ฌ ๋นŒ๋“œ
        run: ./gradlew build  # โœ… Gradle๋กœ Spring Boot ๋นŒ๋“œ

  deploy: # ๋‘ ๋ฒˆ์งธ Job
    runs-on: ubuntu-latest
    needs: build  # build Job์ด ์„ฑ๊ณตํ•ด์•ผ ์‹คํ–‰๋จ

    steps:
      - name: ์„œ๋ฒ„์— ๋ฐฐํฌ
        run: echo "์„œ๋ฒ„์— JAR ๋ฐฐํฌ (์‹ค์ œ ์„œ๋ฒ„ ๋ฐฐํฌ ๋ช…๋ น์–ด ์ž‘์„ฑ ํ•„์š”)"

 

๋ฐ˜์‘ํ˜•