ꡬ체μ μΈ μ€λͺ
κ³Ό κ°μ μ μ:
commit.get("id") or "" λΌμΈμμ commit.get("id")κ° Noneμ΄κ±°λ λΉ λ¬Έμμ΄μΌ κ²½μ°, λΉ λ¬Έμμ΄λ‘ λ체λ©λλ€. νμ§λ§ await get_commit_diff(project_id, "") νΈμΆμ APIμ μ ν¨νμ§ μμ λ§€κ°λ³μλ₯Ό μ λ¬ν μ μμ΄ μ€λ₯λ‘ μ΄μ΄μ§ μ μμ΅λλ€. id κ°μ΄ μμΌλ©΄ ν΄λΉ 컀λ°μ 무μνκ³ λ€μμΌλ‘ λμ΄κ°λ λ°©ν₯μΌλ‘ μμ νλ κ²μ΄ μμ ν©λλ€.
νμΌλͺ : main.py
ꡬ체μ μΈ μ€λͺ
κ³Ό κ°μ μ μ:
analysis["ai_result"]μ λν΄ μ§μ μ κ·Όνκ³ μμ΅λλ€. λ§μ½ analysisκ° Noneμ΄κ±°λ "ai_result" ν€κ° μμΌλ©΄ KeyErrorκ° λ°μν μ μμ΅λλ€. get() λ©μλλ₯Ό ν΅ν΄ μμ νκ² μ κ·Όνλ λ°©μμ κ³ λ €ν΄ λ³΄μμΌ ν©λλ€. μ΄ λΆλΆμ μ΄λ―Έ κ°μ λμ΄ μμΌλ, μ½λ μ 체μ μΌκ΄μ±μ μν΄ λ€λ₯Έ κ³³μμλ λμΌν μ κ·Όμ΄ νμν κ²μ μΆμ²ν©λλ€.
νμΌλͺ : main.py
jenkins_info.get("branch", '')μ²λΌ branch νλμ κΈ°λ³Έκ°μΌλ‘ λΉ λ¬Έμμ΄μ λ£κ³ μμ΅λλ€. κ·Έλ¬λ νμμ μΌλ‘ μ΄ κ°μ΄ DBμ μ μ₯λκ±°λ λ€λ₯Έ μ²λ¦¬μ μ¬μ©λ κ²½μ° λΉ μ€νΈλ§μ΄ λ¬Έμ κ° λ μ μμμ΄ μ‘΄μ¬ν©λλ€. κΈ°λ³Έκ°μ "unknown"μΌλ‘ μ€μ νλ κ²μ΄ μΌκ΄μ±κ³Ό μ€λ₯ μ²λ¦¬μΈ‘λ©΄μμ λ λμ μ μμ΅λλ€. ꡬ체μ μΈ μ€λͺ
κ³Ό κ°μ μ μ:
get_commit_diff() λ©μλμ μ λ¬λλ commit_idκ° None λλ λΉ λ¬Έμμ΄μΈ κ²½μ°, 무ν¨ν κ°μ μ¬μ©νμ¬ μΈλΆ API μμ²μ΄ λ°μν μ μμ΄ API νΈμΆ μ·¨μ½μ μ΄ λ μ μμ΅λλ€. νΉν commit_idκ° μ μμ μΈ νμμ΄ μλ κ²½μ°μλ μμ€ν
μ μ€λ₯ μμ΄ μ§νλ μ μμΌλ―λ‘, commit_idκ° μ ν¨ν λ¬Έμμ΄μΈμ§ νμΈνκ³ μ ν¨νμ§ μλ€λ©΄ μ²λ¦¬λ₯Ό μ€λ¨νκ±°λ κ²½κ³ λ₯Ό μΆλ ₯νλ λ°©ν₯μΌλ‘ κ°μ ν΄μΌ ν©λλ€.
νμΌλͺ : main.py
raw_dataμ diffλ error_log λ± μμ λ°μ΄ν°λ₯Ό μ μ₯ν λ μ 체 λ΄μ©μ΄ κ·Έλλ‘ μ μ₯λλ λΆλΆμ΄ μμ΅λλ€. μ΄ λ°μ΄ν°μ λ―Όκ°ν μ λ³΄κ° ν¬ν¨λμ΄ μμ κ²½μ°, μ μ₯ν λ νν°λ§ λλ λ§μ€νΉ λ‘μ§μ λ£λ κ²μ΄ μ’μ΅λλ€. μλ₯Ό λ€λ©΄, password, token, secret λ±μ΄ ν¬ν¨λ ν€μλλ₯Ό νμ§ν΄ μ κ±°νκ±°λ '*'λ‘ λ체νλ μ²λ¦¬λ₯Ό μΆκ°ν μ μμ΅λλ€. ꡬ체μ μΈ μ€λͺ
κ³Ό κ°μ μ μ:
get_commit_diff νΈμΆ μ None λλ λΉ λ¬Έμμ΄μΈ κ²½μ°μλ κ³μ νΈμΆνλ λ°©μμΌλ‘, μ€λ³΅λ API μμ²μ΄ λ°μν μ μμ΅λλ€. μ΄ λΆλΆμ μμΈ μ²λ¦¬ νΉμ 미리 commit_idκ° μ ν¨νμ§ μλ€λ©΄ μμ²μ μλ΅νλ λ‘μ§μ λ£λ κ²μ΄ μ±λ₯ ν₯μμ λμμ΄ λ μ μμ΅λλ€.
νμΌλͺ : main.py
raw_data=json.dumps({"diff_preview": diff[:2000]})κ³Ό κ°μ΄ diff[:2000]μ μ¬μ©νμ¬ κΈΈμ΄λ₯Ό μ€μμ§λ§, μ 체 λ°μ΄ν°μ μΌλΆλ§ μ μ₯νλ©΄ DB μ μ₯ μ±λ₯μ κ°μ λμ§λ§, μ 체 diffλ₯Ό μ μ₯νμ κ²½μ°μ μ¬μ©λλ μ©λμ΄ λ§μμ§ μ μμ΅λλ€. λν μ μ₯λλ κ°μ ν¬κΈ°λ₯Ό μ μ΄νλ κ²μ΄ μ€μνλ―λ‘, κΈΈμ΄ μ ν λ° μ€λ³΅ μ²΄ν¬ λ± μΆκ°μ μΈ λ³΄μμ΄ νμν©λλ€. ꡬ체μ μΈ μ€λͺ
κ³Ό κ°μ μ μ:
sanitize_filename ν¨μλ νμΌ μ΄λ¦μ μ κ·ννλ μν μ νμ§λ§, ν΄λΉ ν¨μλ re λͺ¨λμ μ¬μ©νλ©° '\w'λ§μ νμ©νκ³ μμ΅λλ€. μ΄ λ°©μμ μλμ°λ 리λ
μ€, macOS λ± νμΌ μμ€ν
μμ μ§μνλ νΉμλ¬Έμλ€μ μ μ½μ κ³ λ €νμ§ μκΈ° λλ¬Έμ, νΉμ μμ€ν
μμμ νμΌλͺ
μμ± μ€λ₯κ° λ°μν μ μμ΅λλ€. λ°λΌμ μ’ λ μμ€ν
νΈνμ±μ κ³ λ €ν μ κ·ν λ°©μμ λμ
νλ κ²μ΄ μ’μ΅λλ€.
νμΌλͺ : main.py
jenkinsμ git κ΄λ ¨ λ©μλμμ μ€λ³΅ μ¬μ©λκ³ μμ΅λλ€. μλ₯Ό λ€μ΄ filename μμ±, with open(...) λ‘μ§λ±μ΄ λ°λ³΅λκ³ μμ΅λλ€. μ½λμ DRY(Do Not Repeat Yourself) μμΉμ μ§ν€κΈ° μν΄ κ³΅ν΅ ν¨μλ ν΄λμ€λ‘ λΆλ¦¬νλ κ²μ΄ μ μ§λ³΄μμ± μΈ‘λ©΄μμ μ 리ν©λλ€. | νλͺ© | νλͺ©λ³ μ΄ν© |
|---|---|
| λ²κ·Έ κ°λ₯μ± | [μ€]: API νΈμΆ μν, [ν]: ai_result μ κ·Ό λ°©μ, λΉ λ¬Έμμ΄ λ¬Έμ |
| 보μ μ·¨μ½μ | [μ€]: API νΈμΆ λ°©μ, [ν]: λ―Όκ°ν λ°μ΄ν° μ μ₯ μ 무μ |
| μ±λ₯ μ΄μ | [ν]: λΆνμν API νΈμΆ, [μ€]: ν¬κΈ° μ νλ μ μ₯ |
| μ½λ 컨벀μ | [ν]: νμΌλͺ μ κ·ν λ¬Έμ , [μ€]: μ½λ μ€λ³΅ |
μ λ°μ μΌλ‘ μ½λκ° μμ μ μ΄λ©° λ‘μ§ κ΅¬μ‘°λ μ μ€κ³λμ΄ μμΌλ, μΌλΆ μμΈ μ²λ¦¬ λ° λ³΄μ μΈ‘λ©΄μμ κ°μ μ΄ νμν λΆλΆμ΄ μμ΅λλ€. νΉν API νΈμΆ μ Noneμ΄λ λΉ λ¬Έμμ΄ μ λ¬ λ°©μ§ μ λ―Όκ°ν λ°μ΄ν° λ§μ€νΉ λ°©μ μΆκ°λ μ€μν κ°μ ν¬μΈνΈμ
λλ€.