GitHub Webhookμ μ΄λ»κ² λμνλ?
git push β HTTP POST β CI/CD νΈλ¦¬κ±°
GitHub Webhookμ Repository Settings > Webhooksμμ URLμ λ±λ‘νλ©΄ λμν©λλ€. μ΄λ²€νΈ λ°μ μ GitHubκ° ν΄λΉ URLλ‘ JSON payloadμ ν¨κ» HTTP POSTλ₯Ό 보λ λλ€. X-Hub-Signature-256 ν€λλ‘ HMAC μλͺ μ ν¬ν¨νμ¬ μμ²μ μ§μλ₯Ό κ²μ¦ν μ μμ΅λλ€. μμ μλ²λ 200 OKλ₯Ό 10μ΄ λ΄μ λ°νν΄μΌ νλ©°, μ€ν¨ μ GitHubκ° μλμΌλ‘ μ¬μλν©λλ€.
ꡬ쑰 λ€μ΄μ΄κ·Έλ¨
actual = request.headers["X-Hub-Signature-256"]
secure_compare(expected, actual) # true → μ μ
- 10μ΄ λ΄ 200 OK λ°ν νμ (λ¬΄κ±°μ΄ μ²λ¦¬λ λ°±κ·ΈλΌμ΄λλ‘)
- μ€ν¨ μ GitHubκ° μλ μ¬μλ (μ΅λ 3ν)
- Settings → Webhooksμμ μ μ‘ λ‘κ·Έ νμΈ κ°λ₯
- λ‘컬 κ°λ° μ ngrok νμ (κ³΅κ° URLμ΄ μμΌλ―λ‘)
λμ νλ¦
Repository Settingsμμ Webhook URL + Secret λ±λ‘
κ°λ°μκ° git push μ€ν (λλ PR μμ±, Issue λ±)
GitHubκ° λ±λ‘λ URLλ‘ HTTP POST μ μ‘ (JSON payload)
X-Hub-Signature-256 ν€λλ‘ HMAC-SHA256 μλͺ ν¬ν¨
μμ μλ²κ° μλͺ κ²μ¦ ν μ΄λ²€νΈ μ²λ¦¬ (CI/CD νΈλ¦¬κ±° λ±)
μλ²κ° 200 OK λ°ν (10μ΄ λ΄, μ€ν¨ μ GitHub μ¬μλ)
μ₯μ
- ✓ μ€μ μ΄ λ§€μ° κ°λ¨
- ✓ μ΄λ²€νΈ μ’ λ₯ μΈλ°νκ² μ ν κ°λ₯
- ✓ μ€ν¨ μ μλ μ¬μλ
- ✓ GitHub UIμμ μ μ‘ λ‘κ·Έ νμΈ κ°λ₯
λ¨μ
- ✗ κ³΅κ° URL νμ (λ‘컬 κ°λ° μ ngrok νμ)
- ✗ 10μ΄ νμμμ (λ¬΄κ±°μ΄ μ²λ¦¬λ λΉλκΈ°λ‘)
- ✗ μλͺ κ²μ¦ ꡬν νμ
- ✗ μ΄λ²€νΈ μμ 보μ₯ μ λ¨