Audit de Cod și Securitate Automatizat în CI/CD folosind Local AI

Configurare noua (How To)

Situatie

Echipele de dezvoltare necesită Code Review-uri rapide pe Pull/Merge Requests pentru a detecta vulnerabilități (ex. SQL Injections, OWASP, credențiale hardcodate) și bug-uri logice. Procesul manual este lent și blochează developerii seniori. Trimiterea codului sursă proprietar către soluții de AI din cloud (ex. OpenAI, GitHub Copilot) încalcă politicile interne de confidențialitate și Data Leakage. Este necesară o soluție locală (on-premise) care să auditeze automat codul modificat, fără costuri per apel.

Solutie

Pasi de urmat

Se configurează un server intern (sau un container dedicat) pe care se instalează Ollama pentru a rula un model specializat pe programare.

  1. Se instalează Ollama pe o mașină Linux.

  2. Se descarcă modelul (Qwen2.5-Coder sau DeepSeek-Coder au performanțe excelente la resurse reduse): ollama run qwen2.5-coder:7b

  3. Serviciul va expune API-ul local pe http://<IP_SERVER_AI>:11434.

Se configurează platforma Git internă (GitLab, Gitea, Bitbucket) să trimită un Webhook către un serviciu Python local la fiecare creare de Pull Request / Merge Request. Scriptul Python primește webhook-ul, extrage ID-ul MR-ului și folosește API-ul platformei Git pentru a descărca strict liniile modificate (git diff): GET /api/v4/projects/{project_id}/merge_requests/{mr_iid}/changes

Scriptul Python asamblează git diff-ul și îl trimite către modelul local cu un System Prompt de securitate strict: Exemplu Prompt: “Ești un inginer DevSecOps. Analizează următorul git diff. Caută exclusiv vulnerabilități de securitate, credențiale expuse sau logici ineficiente. Dacă codul este curat, returnează string-ul ‘OK’. Dacă găsești probleme, explică problema pe scurt și furnizează blocul de cod corectat. Nu adăuga alte salutări sau texte.” Cererea HTTP se face către endpoint-ul /api/generate al serverului Ollama.

Postarea rezultatului și blocarea/aprobarea PR-ului (Scripting) Răspunsul modelului este preluat de script. Dacă răspunsul este diferit de “OK”, scriptul folosește din nou API-ul platformei Git pentru a posta comentariul modelului direct în firul de discuție al Pull Request-ului, indicând linia exactă cu probleme. Pentru implementări stricte, scriptul poate returna un cod de eroare (exit code 1) în pipeline, marcând PR-ul ca “Failed” și forțând developerul să corecteze codul înainte de a face Merge în ramura principală.

Python code:

import requests
import sys

# Configurari
OLLAMA_URL = "http://localhost:11434/api/generate"
GIT_TOKEN = "your_personal_access_token"
DIFF_CONTENT = "..." # Preluat din CI/CD sau API

def audit_code(diff):
    prompt = f"Analizeaza urmatorul Git Diff pentru vulnerabilitati. Fii scurt.\n\n{diff}"
    payload = {
        "model": "qwen2.5-coder:7b",
        "prompt": prompt,
        "stream": False
    }
    resp = requests.post(OLLAMA_URL, json=payload).json()
    return resp.get("response", "").strip()

result = audit_code(DIFF_CONTENT)

if result.upper() != "OK":
    print("Vulnerabilitati detectate:\n", result)
    # Aici intervine apelul de POST catre GitLab/Gitea pentru a lasa comentariu
    sys.exit(1) # Blocheaza pipeline-ul
else:
    print("Codul este sigur.")
    sys.exit(0) # Permite trecerea mai departe

Tip solutie

Permanent

Voteaza

(3 din 5 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?