GitLab hat keine offizielle CodeCharter-Integration als Component, aber mit ein paar Zeilen YAML läuft die CLI sauber im Pipeline.
Minimal-Setup
.gitlab-ci.yml:
codecharter:
image: mcr.microsoft.com/dotnet/sdk:9.0
stage: test
before_script:
- curl -sSL -H "Authorization: Bearer $CODECHARTER_API_KEY"
-o codecharter.tar.gz
https://codecharter.tools/api/v1/cli/linux-x64/latest
- mkdir -p /opt/codecharter && tar -xzf codecharter.tar.gz -C /opt/codecharter
- chmod +x /opt/codecharter/codecharter
- export PATH="/opt/codecharter:$PATH"
script:
- codecharter analyze . --fail-on error --output sarif --output-file codecharter.sarif
artifacts:
when: always
paths:
- codecharter.sarif
reports:
sast: codecharter.sarif
API-Key beschaffen
- Im Portal unter API Keys einen Key erzeugen.
- In GitLab unter
Settings → CI/CD → VariablesalsCODECHARTER_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 CodeCharter-Cache zwischen Pipelines persistieren:
codecharter:
# ... wie oben ...
cache:
key: codecharter-$CI_COMMIT_REF_SLUG
paths:
- .cache/codecharter/
variables:
CODECHARTER_CACHE_DIR: $CI_PROJECT_DIR/.cache/codecharter
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 $CODECHARTER_API_KEY"
-o codecharter.tar.gz
https://codecharter.tools/api/v1/cli/linux-x64/1.4.0
Empfehlung: für CI immer pinnen, siehe Versionierung.
Self-Hosted GitLab Runner
Bei einem Self-Hosted Runner braucht die Maschine einmal
codecharter.tools 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:
- codecharter analyze . --fail-on error --output json --output-file codecharter.json
- # konvertiere zu GitLab Code Quality Format
artifacts:
reports:
codequality: codecharter.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 |
$CODECHARTER_API_KEY |
euer Secret |