10λΆ λ§μ ꡬμΆνλ GitHub Actions CI νμ΄νλΌμΈ ν΅μ¬ λ¨κ³ ππ»
μλ νμΈμ, κ°λ°μ μ¬λ¬λΆ! νΉμ "λ΄ μ½λλ₯Ό μΈμ μ΄λμλ μλμΌλ‘ ν μ€νΈνκ³ λ°°ν¬ν μ μλ€λ©΄ μΌλ§λ νΈν κΉ?"λΌλ μκ° ν λ²μ―€ ν΄λ³΄μ ¨λμ? π€π μ€λμ κ·Έ κΏμ νμ€λ‘ λ§λ€μ΄μ£Όλ GitHub Actions CI/CD μλν νμ΄νλΌμΈμ 10λΆ λ§μ ꡬμΆνλ ν΅μ¬ λ¨κ³λ₯Ό μΉμ νκ² μ€λͺ λ릴κ²μ! β¨β±οΈ
μ΄ κΈλ§ μ½μ΄λ "μ, λλ ν΄λ΄μΌκ² λ€!"λΌλ μμ κ°μ΄ μκΈ°μ€ κ²λλ€. κ·Έλ λ€λ©΄, λ°λ‘ μμν΄λ³ΌκΉμ? ππ₯
π§π» λκ° μ΄λ κ² κ°λ¨νλκ³ ? π€¨
GitHub Actionsλ μ λ§ κ°λ ₯ν μν¬νλ‘μ° μλν λꡬμΈλ°μ, 볡μ‘ν μ€μ μμ΄λ μ½λ νΈμ ν λ²μ μλ λΉλ, ν μ€νΈ, λ°°ν¬κΉμ§ κ°λ₯νκ² λ§λ€μ΄μ€λλ€. ππͺ
κ·Έλ¦¬κ³ ν΅μ¬μ λ¨ 10λΆ λ§μ, λΉ λ₯΄κ² μμνλ λ°©λ²μ μμΌλ, λΆλ΄ κ°μ§ λ§κ³ ν¨κ» λ°λΌμ μ£ΌμΈμ! π―β¨
π GitHub Actions CI/CD νμ΄νλΌμΈ ꡬμΆμ ν΅μ¬ νλ¦ π
1. λ² μ΄μ§ μ€λΉλ¬Ό μ΄ν΄λ³΄κΈ° β
- GitHub κ³μ & GitHub μ μ₯μ(repositories) π
- ν°λ§ λ¨Ήκ³ μ½λ μ¬λ¦¬κΈ° π
- μν¬νλ‘μ° νμΌ μμ± μμΉ:
/.github/workflows/
ν΄λ π
2. λ¨κ³λ³ κ°λ¨ν μ€μ κ°μ΄λ π’
1οΈβ£ μν¬νλ‘μ° νμΌ μμ± λ° κΈ°λ³Έ ꡬ쑰 λ§λ€κΈ° βοΈ
.github/workflows/ci.yml
μ νμΌ λ§λ€κΈ° π- κΈ°λ³Έ ν νλ¦Ώ λ°λΌ μ κΈ°
yaml
name: CI Build & Test π§
on:
push:
branches:
- main # λλ master
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 체ν¬μμμμμ! β
uses: actions/checkout@v3
- name: Node.js μ€μΉνκΈ° π΄
uses: actions/setup-node@v3
with:
node-version: '14'
- name: μμ‘΄μ± μ€μΉ λ° ν
μ€νΈ π₯
run: |
npm install
npm test
μ΄κ² λ€μ λλ€! π₯³β¨
2οΈβ£ ν΅μ¬ λ¨κ³ νμ¬νκΈ°! πβ¨
- push μ΄λ²€νΈ κ°μ§ → μ½λ μ»€λ° μ μλ π
- 체ν¬μμ: μ΅μ μμ€ λ°μμ€κΈ° π₯
- νκ²½ μΈν : νμν μΈμ΄/λꡬ μ€μΉ π§°
- ν μ€νΈ λ° λΉλ: λΉ λ₯΄κ³ μ½κ² ν μ€νΈ μν π§ͺ
3. ν΅μ¬ κΏν π: λ°°ν¬κΉμ§ κ³ λ €νλ€λ©΄! ππ»
- λ°°ν¬ λ¨κ³ μΆκ°νκΈ°:
deployment.yml
νμΌ λ§λ€κΈ° π οΈ - Github Secrets νμ©νκΈ°: λ°°ν¬μ© API ν€ μμ νκ² μ μ₯ π
- μ‘°κ±΄λΆ μ€ν:
if:
λ‘ νΉμ μν©μλ§ λ°°ν¬ μννκΈ° π―
yaml
- name: λ°°ν¬ μ€λΉ π¨
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
run: echo "λ°°ν¬ μμ!"
μ΄λ κ² κ°λ¨ν 쑰건문μΌλ‘ λ°°ν¬ νκ²½λ κ°λ₯! ππ
π₯ μ€μ ν & 체ν¬λ¦¬μ€νΈ π
β κΌ κΈ°μ΅νμ! π
.github/workflows/
ν΄λ μμ±μ νμ! π§- μ½λ 컀λ°κ³Ό λμμ μλ μ€ν μ€μ π―
- νκ²½μ λ§λ λꡬ λ²μ λͺ μνκΈ° π§π»
- Secretsλ λ°λμ μνΈν μ μ₯ π
- λ°°ν¬ε ν μ€ν μ '건κ°κ²μ§'μ²λΌ! π©Ί
β μ€μ ν¬μΈνΈ μμ½ β
- μ΄λ²€νΈ μ’
λ₯(
push
,pull_request
) μ ννκΈ° π - νκ²½ μΈν
(
setup Nodes
,setup Python
λ±) μ ννκ² βοΈ - μ€ν¨ μ μ¦μ μλ¦Ό μ€μ νκΈ° π²
- λ°°ν¬λ λ¨κ³λ³λ‘ μμ νκ²!(μ€ν μ΄μ§→νλ‘λμ ) π¦
π μ΄κ±Έλ‘ λ! λ°λ‘ μ€μ²νκΈ° π
μ§κΈμΉ! λ°λ‘ λ΄ κΉνλΈ μ μ₯μμ κ°μ μλμ²λΌ λ°λΌλ§ νλ©΄, λλ§μ CI νμ΄νλΌμΈμ΄ 10λΆ λ§μ νμν©λλ€! ππ₯³
- μ μ₯μ 루νΈμ
.github/workflows/ci.yml
λ§λ€κΈ° βοΈ - μ μμ μ½λ λΆμ΄κΈ° π
- μ»€λ° ν νΈμνκΈ° π
- Actions νμμ μ§νμν© νμΈ! π
βοΈ μΆνν©λλ€! μ΄μ μ½λλ₯Ό νΈμνλ μ¦μ ν μ€νΈκ° μλμΌλ‘ λμκ°κ³ , λ°°ν¬κΉμ§ μλννλ λ§λ²μ¬κ° λμ΄μ! π§βοΈβ¨
π μμ£Ό 묻λ μ§λ¬Έ & FAQ π
Q1. μ΄λ μΈμ΄ νλ‘μ νΈλ μ¬μ©ν μ μλμ?
π λ€! Node.js, Python, Java, C++ λ± κ±°μ λͺ¨λ μΈμ΄μ μ μ© κ°λ₯νλ©°, κ° μΈμ΄λ³ νκ²½μ€μ λ§ μ‘°κΈμ© λ€λ¦
λλ€! π―
Q2. 무λ£λ‘ μ¬μ© κ°λ₯νκ°μ?
π λ¬Όλ‘ μ
λλ€! κΉνλΈκ° μ 곡νλ λ¬΄λ£ μκΈμ μμλ μΆ©λΆν μ¬μ© κ°λ₯νλ©°, μΌμ μκ°(μκ°λΉ 2,000λΆ) 무λ£μ
λλ€ β³π°
Q3. λ°°ν¬ μλνλ μ΄λ»κ² ν κΉμ?
π SSH ν€ λ±λ‘, API ν ν°μμ± ν Secretsμ μ μ₯, λ°°ν¬ μ€ν¬λ¦½νΈ μμ±λ§μΌλ‘ μ½κ³ κ°νΈνκ² μμ±! πΆ
π― κ²°λ‘ : μμμ΄ λ°μ λλ€! μ§κΈ λ°λ‘ ν΄λ³΄μΈμ! π
μ΄ κΈμμ 보μ¬λλ¦° 10λΆ λ§μ ꡬμΆνλ GitHub Actions CI νμ΄νλΌμΈ ν΅μ¬ λ¨κ³λ‘, μ¬λ¬λΆλ μ΄λ €μ΄ CI/CDλ μ½κ³ λΉ λ₯΄κ² λ§λ€ μ μμ΄μ! ππ οΈ
μ½κ³ κ°λ¨ν μ€ννΈλ‘ μ΄μ μλνμ μΈκ³μ λ°μ΄λ€μ΄ 보μΈμ. π κ·Έλ¦¬κ³ 'μ±κ³΅μ λ§'μ λ§λ½νλ©°, λ§€λ² νΈμλ§ νλ©΄ κΉλν ν μ€νΈμ λ°°ν¬κ° λμμ! ππ
κΆκΈν μ μ΄λ λ κΉμ μ 보λ λκΈμ΄λ DMμΌλ‘ λ¬Έμ μ£ΌμΈμ! π€ μΈμ λ μ¬λ¬λΆμ μ±κ³΅μ μμν©λλ€! π₯π₯π₯
μ§κΈ λ°λ‘ μμνκ³ , κ°λ°μ λ³νλ₯Ό κΈ°λνμΈμ! π π»π
μ΄μ κΈ λ³΄κΈ°!!
ν΄λΌμ°λ μλΉμ€ λΉμ©μ΄ κ³μ μ¦κ°νλ μμΈ μκ³ κ³μ κ°μ
π μ λͺ©: ν΄λΌμ°λ μλΉμ€ λΉμ©μ΄ κ³μ μ¦κ°νλ μμΈ μκ³ κ³μ κ°μ?π₯οΈ μλ νμΈμ! μ€λμ λ§μ κΈ°μ κ³Ό κ°μΈμ΄ κ³ λ―Όνλ μ£Όμ , λ°λ‘ 'ν΄λΌμ°λ μλΉμ€ λΉμ© μ¦κ° λ¬Έμ 'μ λν΄ ν¨κ» νν€μ³
5.asmrbita.com
Linux μλ² λͺ¨λν°λ§ μλν μ€ν¬λ¦½νΈ κ΅¬μΆ μλ²½ κ°μ΄λ
π§³ Travel (κ΅λ΄/ν΄μΈ)μ΄μ κΈ λ³΄κΈ°!!
5.asmrbita.com