CodeGuard

GitLab CI

CodeGuard im GitLab-Pipeline integrieren, als Job mit SARIF-Upload.

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

  1. Im Portal unter API Keys einen Key erzeugen.
  2. In GitLab unter Settings → CI/CD → Variables als CODEGUARD_API_KEY hinterlegen, "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