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 ๋ฐฐํฌ (์ค์ ์๋ฒ ๋ฐฐํฌ ๋ช
๋ น์ด ์์ฑ ํ์)"
'๐ Infra > CI ยท CD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Github Actions + Docker + EC2๋ก Spring Boot CI /CD ๊ตฌ์ถ (0) | 2025.03.23 |
---|---|
Jenkins์ ์ด์ฉํ Spring Boot ๋ฐฐํฌ ์๋ํ (0) | 2025.03.03 |
GitHub Actions ์๊ฐ (0) | 2024.05.01 |
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 ๋ฐฐํฌ (์ค์ ์๋ฒ ๋ฐฐํฌ ๋ช
๋ น์ด ์์ฑ ํ์)"
'๐ Infra > CI ยท CD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Github Actions + Docker + EC2๋ก Spring Boot CI /CD ๊ตฌ์ถ (0) | 2025.03.23 |
---|---|
Jenkins์ ์ด์ฉํ Spring Boot ๋ฐฐํฌ ์๋ํ (0) | 2025.03.03 |
GitHub Actions ์๊ฐ (0) | 2024.05.01 |