GitLab CI
GitLab hat keine offizielle CodeGuard-Integration als Component, aber mit ein paar Zeilen YAML läuft die CLI sauber im Pipeline.
Minimal-Setup
.gitlab-ci.yml:
codeguard:
image: mcr.microsoft.com/dotnet/sdk:9.0
stage: test
before_script:
- apt-get update -qq && apt-get install -qq -y unzip
- curl -sSL -H "Authorization: Bearer $CODEGUARD_API_KEY"
-o codeguard.zip
https://codeguard.bochmann-software.com/api/v1/cli/latest/linux-x64
- unzip -q codeguard.zip -d /opt/codeguard
- chmod +x /opt/codeguard/codeguard
- export PATH="/opt/codeguard:$PATH"
script:
- codeguard analyze . --fail-on error --output sarif --output-file codeguard.sarif
artifacts:
when: always
paths:
- codeguard.sarif
reports:
sast: codeguard.sarif
API-Key beschaffen
- Im Portal unter API Keys einen Key erzeugen.
- In GitLab unter
Settings → CI/CD → VariablesalsCODEGUARD_API_KEYhinterlegen, "Protected" und "Masked" anhaken.
SARIF für GitLab SAST
SARIF ist GitLabs natives Format für statische Analyse. Wenn die
artifacts.reports.sast auf die SARIF-Datei zeigt, erscheinen die
Findings:
- Auf der MR-Übersicht als Annotations
- Im "Security & Compliance → Vulnerability Report" als Issues
- Im "Code Quality"-Tab
Caching
Den CodeGuard-Cache zwischen Pipelines persistieren:
codeguard:
# ... wie oben ...
cache:
key: codeguard-$CI_COMMIT_REF_SLUG
paths:
- .cache/codeguard/
variables:
CODEGUARD_CACHE_DIR: $CI_PROJECT_DIR/.cache/codeguard
Auf einer mittleren Solution geht ein warmer Run damit von 30 Sekunden auf 5-10 Sekunden runter.
Versions-Pinning
Statt /latest/ eine konkrete CLI-Version pullen:
- curl -sSL -H "Authorization: Bearer $CODEGUARD_API_KEY"
-o codeguard.zip
https://codeguard.bochmann-software.com/api/v1/cli/1.4.0/linux-x64
Empfehlung: für CI immer pinnen, siehe Versionierung.
Self-Hosted GitLab Runner
Bei einem Self-Hosted Runner braucht die Maschine einmal
codeguard.bochmann-software.com und harbor.bochmann-software.com
(falls ihr Docker-Images bezieht). Sonst keine Anpassungen.
In abgeschotteten Netzen: das CLI-Binary auf den Runner spiegeln und mit lokalem Pfad statt Curl-Download arbeiten.
Merge-Request-Reports
Optional: die code_quality-Output-Variante (in GitLab-eigenem Format)
für die "Code Quality"-Sektion auf MRs:
script:
- codeguard analyze . --fail-on error --output json --output-file codeguard.json
- # konvertiere zu GitLab Code Quality Format
artifacts:
reports:
codequality: codeguard.json
Den Konverter könnt ihr mit jq schnell bauen.
Pipeline-Variablen
Praktische Variablen die ihr im Job zur Verfügung habt:
| Variable | Verwendung |
|---|---|
$CI_PROJECT_DIR |
Repo-Root |
$CI_COMMIT_REF_SLUG |
Branch-Name für Caching |
$CI_MERGE_REQUEST_IID |
MR-Nummer wenn vorhanden |
$CODEGUARD_API_KEY |
euer Secret |