Zum Inhalt

GitLab

Detaillierter Leitfaden fĂŒr die Integration mit GitLab CI.


Tokens

Personal Access Token (PAT)

Empfohlen fĂŒr alle GitLab-PlĂ€ne (einschließlich Free).

CI_JOB_TOKEN funktioniert nicht

GitLabs automatischer CI_JOB_TOKEN kann keine Kommentare zu Merge Requests posten (die Notes API erfordert den api-Scope, den CI_JOB_TOKEN nicht hat). Sie mĂŒssen einen Personal Access Token oder Project Access Token verwenden.

So erstellen Sie einen PAT:

  1. Gehen Sie zu User Settings → Access Tokens → Add new token
    • URL: https://gitlab.com/-/user_settings/personal_access_tokens
  2. FĂŒllen Sie die Felder aus:
    • Token name: ai-code-reviewer
    • Expiration date: nach Bedarf festlegen (z.B. 1 Jahr)
    • Scopes: aktivieren Sie api
  3. Klicken Sie auf Create personal access token
  4. Kopieren Sie den Token sofort — GitLab zeigt ihn nur einmal!

Verwendung in CI:

  1. Gehen Sie zu Settings → CI/CD → Variables → Add variable
  2. Variable hinzufĂŒgen:

    • Key: AI_REVIEWER_GITLAB_TOKEN
    • Value: fĂŒgen Sie Ihren Token ein
    • Flags: aktivieren Sie Masked, ❌ deaktivieren Sie Protected

    Die Variable wird automatisch an alle Jobs vererbt — kein YAML variables: Mapping nötig.

«Protected» deaktivieren!

StandardmĂ€ĂŸig markiert GitLab neue Variablen als Protected. Protected-Variablen sind nur in geschĂŒtzten Branches verfĂŒgbar (z.B. main).

MR-Pipelines laufen auf ungeschĂŒtzten Source-Branches — die Variable ist dann leer und Sie erhalten 401 Unauthorized.

Deaktivieren Sie immer «Protected» fĂŒr AI_REVIEWER_GITLAB_TOKEN und AI_REVIEWER_GOOGLE_API_KEY.

Token speichern

GitLab zeigt den Token nur einmal an. Speichern Sie ihn sofort an einem sicheren Ort.

Project Access Token ( Premium/Ultimate)

Nur verfĂŒgbar mit GitLab Premium und Ultimate PlĂ€nen. Eine gute Wahl, wenn Sie einen projektbezogenen Token anstelle eines persönlichen bevorzugen.

Vorteile gegenĂŒber PAT:

  • Auf ein einzelnes Projekt beschrĂ€nkt (kein Zugriff auf andere Projekte)
  • Kann von Projekt-Maintainern widerrufen werden (keine AbhĂ€ngigkeit von einem bestimmten Benutzer)
  • Besser fĂŒr Teams — nicht an ein persönliches Konto gebunden

So erstellen Sie einen Project Access Token:

  1. Gehen Sie zu Project → Settings → Access Tokens
    • URL: https://gitlab.com/<owner>/<repo>/-/settings/access_tokens
  2. FĂŒllen Sie die Felder aus:
    • Token name: ai-code-reviewer
    • Role: Developer (Minimum erforderlich)
    • Scopes: aktivieren Sie api
  3. Klicken Sie auf Create project access token
  4. Kopieren Sie den Token sofort

Verwendung in CI:

Gleich wie PAT — als AI_REVIEWER_GITLAB_TOKEN in CI/CD Variables hinzufĂŒgen:

  1. Key: AI_REVIEWER_GITLAB_TOKEN
  2. Value: fĂŒgen Sie Ihren Project Access Token ein

Welchen Token wÀhlen?

Personal Access Token Project Access Token
Plan Alle (einschließlich Free) Nur Premium/Ultimate
Einrichtung Manuell Manuell
Geltungsbereich Alle Projekte des Benutzers Einzelnes Projekt
Inline-Kommentare ✅ ✅
Am besten fĂŒr Free-Plan + volle Funktionen Teams mit Premium/Ultimate

CI/CD-Variablen

Variablen hinzufĂŒgen

Settings → CI/CD → Variables → Add variable

Variable Wert Optionen
AI_REVIEWER_GOOGLE_API_KEY Gemini API-SchlĂŒssel ✅ Masked, ❌ Uncheck Protected
AI_REVIEWER_GITLAB_TOKEN Personal / Project Access Token ✅ Masked, ❌ Uncheck Protected

Masked

Aktivieren Sie immer Masked fĂŒr Secrets — sie werden nicht in Logs angezeigt.


Trigger

Empfohlener Trigger

rules:
  - if: $CI_PIPELINE_SOURCE == "merge_request_event"

Dies fĂŒhrt den Job nur fĂŒr Merge-Request-Pipelines aus.

Alternativer Trigger (only/except)

only:
  - merge_requests

rules vs only

rules — neuere Syntax, von GitLab empfohlen.


Job-Beispiele

Minimal

ai-review:
  image: ghcr.io/konstziv/ai-code-reviewer:1
  script:
    - ai-review
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"

CI/CD-Variablen AI_REVIEWER_GOOGLE_API_KEY und AI_REVIEWER_GITLAB_TOKEN werden automatisch vererbt.

VollstÀndig (empfohlen)

ai-review:
  image: ghcr.io/konstziv/ai-code-reviewer:1
  stage: test
  script:
    - ai-review
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
  allow_failure: true
  timeout: 10m
  variables:
    AI_REVIEWER_LANGUAGE: uk
    AI_REVIEWER_LANGUAGE_MODE: adaptive
  interruptible: true

Was es bewirkt:

  • allow_failure: true — MR wird nicht blockiert, wenn Review fehlschlĂ€gt
  • timeout: 10m — maximal 10 Minuten
  • interruptible: true — kann bei neuem Commit abgebrochen werden

Mit benutzerdefinierter Stage

stages:
  - test
  - review
  - deploy

ai-review:
  stage: review
  image: ghcr.io/konstziv/ai-code-reviewer:1
  script:
    - ai-review
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
  needs: []  # Nicht auf vorherige Stages warten

Self-hosted GitLab

Konfiguration

variables:
  AI_REVIEWER_GITLAB_URL: https://gitlab.mycompany.com

Docker Registry

Wenn Ihr GitLab keinen Zugriff auf ghcr.io hat, erstellen Sie einen Mirror:

# Auf einer Maschine mit Zugriff
docker pull ghcr.io/konstziv/ai-code-reviewer:1
docker tag ghcr.io/konstziv/ai-code-reviewer:1 \
    gitlab.mycompany.com:5050/devops/ai-code-reviewer:latest
docker push gitlab.mycompany.com:5050/devops/ai-code-reviewer:latest
ai-review:
  image: gitlab.mycompany.com:5050/devops/ai-code-reviewer:latest

GitLab CI-Variablen

AI Code Reviewer verwendet automatisch:

Variable Beschreibung
CI_PROJECT_PATH owner/repo
CI_MERGE_REQUEST_IID MR-Nummer
CI_SERVER_URL GitLab-URL

Sie mĂŒssen --repo und --pr nicht ĂŒbergeben — sie werden automatisch aus CI ĂŒbernommen.


Variable-gesteuerte Konfiguration

Verwenden Sie CI/CD Variables, um zwischen LLM-Anbietern und Modellen zu wechseln, ohne .gitlab-ci.yml zu Ă€ndern. Dies ist nĂŒtzlich, um die Review-QualitĂ€t verschiedener Modelle am selben MR zu vergleichen.

Einrichtung

CI/CD Variables (Settings → CI/CD → Variables):

Variable Beschreibung Optionen
AI_REVIEWER_GOOGLE_API_KEY Gemini API-SchlĂŒssel ✅ Masked, ❌ Protected deaktivieren
AI_REVIEWER_MISTRAL_API_KEY Mistral API-SchlĂŒssel ✅ Masked, ❌ Protected deaktivieren
AI_REVIEWER_GITLAB_TOKEN GitLab-Token ✅ Masked, ❌ Protected deaktivieren
AI_REVIEWER_LLM_PROVIDER PrimĂ€rer Anbieter (google, mistral) ❌ Protected deaktivieren
AI_REVIEWER_LLM_FALLBACK_PROVIDER Fallback-Anbieter ❌ Protected deaktivieren
AI_REVIEWER_MISTRAL_MODEL Mistral-Modell ❌ Protected deaktivieren
AI_REVIEWER_MISTRAL_API_URL Benutzerdefinierte API-URL (fĂŒr Codestral Free Tier) ❌ Protected deaktivieren

Job-Konfiguration

ai-review:
  image: ghcr.io/konstziv/ai-code-reviewer:1
  stage: review
  script:
    - ai-review
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
  allow_failure: true
  interruptible: true

Kein variables:-Abschnitt nötig — alle AI_REVIEWER_* CI/CD-Variablen werden automatisch vererbt.

Presets umschalten

Ändern Sie die CI/CD Variables in der GitLab-OberflĂ€che und klicken Sie auf Retry fĂŒr die Pipeline desselben MR:

Preset AI_REVIEWER_LLM_PROVIDER AI_REVIEWER_MISTRAL_MODEL AI_REVIEWER_MISTRAL_API_URL AI_REVIEWER_LLM_FALLBACK_PROVIDER
Gemini (Standard) google (leer) (leer) (leer)
Mistral Large mistral mistral-large-latest (leer) google
Codestral Free mistral codestral-latest https://codestral.mistral.ai google
Devstral mistral devstral-latest (leer) google

Codestral Free Tier SchlĂŒssel

FĂŒr das Preset „Codestral Free" muss AI_REVIEWER_MISTRAL_API_KEY einen SchlĂŒssel von codestral.mistral.ai enthalten, nicht von console.mistral.ai.

Kein Hardcoding im YAML nötig

Anders als bei GitHub Actions (wo Inputs explizit zugeordnet werden mĂŒssen) ĂŒbergibt GitLab CI automatisch alle CI/CD-Variablen als Umgebungsvariablen. Setzen Sie sie einfach in der OberflĂ€che — die Anwendung erkennt sie ĂŒber das PrĂ€fix AI_REVIEWER_*.


Review-Ergebnis

Notes (Kommentare)

AI Review postet Kommentare zum MR als Notes.

Discussions (Inline)

FĂŒr Inline-Kommentare benötigen Sie einen Personal Access Token oder Project Access Token mit api-Scope.

Inline-Kommentare erscheinen direkt neben Code-Zeilen in der Diff-Ansicht.

Zusammenfassung

Am Ende des Reviews wird eine Zusammenfassungs-Note gepostet mit:

  • Gesamtstatistik
  • Metriken
  • Gute Praktiken

Fehlerbehebung

Review postet keine Kommentare

ÜberprĂŒfen:

  1. AI_REVIEWER_GOOGLE_API_KEY-Variable ist gesetzt
  2. AI_REVIEWER_GITLAB_TOKEN hat ausreichende Berechtigungen (Scope: api)
  3. Pipeline lĂ€uft fĂŒr MR (nicht fĂŒr einen Branch)

"401 Unauthorized"

Ursache: UngĂŒltiger Token.

Lösung:

  • ÜberprĂŒfen Sie, ob der Token nicht abgelaufen ist
  • ÜberprĂŒfen Sie den Scope (benötigt api)

"403 Forbidden"

Ursache: Unzureichende Berechtigungen.

Lösung:

  • ÜberprĂŒfen Sie, ob der Token den api-Scope hat
  • ÜberprĂŒfen Sie, ob der Token Zugriff auf das Projekt hat

"404 Not Found"

Ursache: MR nicht gefunden.

Lösung:

  • ÜberprĂŒfen Sie, ob die Pipeline fĂŒr MR lĂ€uft
  • ÜberprĂŒfen Sie CI_MERGE_REQUEST_IID

Rate Limit (429)

Ursache: API-Limit ĂŒberschritten.

Lösung:

  • AI Code Reviewer wiederholt automatisch mit Backoff
  • Bei anhaltendem Problem — warten oder Limits erhöhen

Best Practices

1. PAT fĂŒr volle FunktionalitĂ€t verwenden

2. allow_failure hinzufĂŒgen

allow_failure: true

MR wird nicht blockiert, wenn Review fehlschlÀgt.

3. Timeout setzen

timeout: 10m

4. Job unterbrechbar machen

interruptible: true

Altes Review wird bei neuem Commit abgebrochen.

5. Nicht auf andere Stages warten

needs: []

Review startet sofort, ohne auf Build/Test zu warten.


NĂ€chster Schritt