Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| de:modul:ffit:3-jahr:cicd:learningunits:lu12:a [2026/05/14 16:03] – apeter | de:modul:ffit:3-jahr:cicd:learningunits:lu12:a [2026/05/18 23:27] (aktuell) – apeter | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== LU12a - Placeholder | + | ====== LU12a - Jenkins Secrets |
| + | Lokal werden Secrets oft in privaten '' | ||
| - | * Aktueller Stand | + | Die verschiedenen Typen von " |
| - | | + | |
| - | | + | ^ Typ ^ Zweck ^ Beispiele ^ Verwendung in Pipeline ^ |
| - | | + | | Secret text | Einzelner String-Wert | API Keys, Tokens | <code groovy> |
| - | * Secrets in Github | + | | Username/ |
| - | * Secrets | + | | SSH Key | SSH Zugriff | Server Deploy, Git SSH | <code groovy> |
| - | | + | | Secret file | Datei als Secret | kubeconfig, JSON Keys, Zertifikate | <code groovy> |
| - | * Sonar-Token | + | | Certificate | X.509 Zertifikate | mTLS, interne APIs | Zertifikatsbasierte Auth (zum Beispiel für Webhooks) | |
| + | |||
| + | Nachfolgend ist die Verwendung | ||
| + | |||
| + | ^ Jenkinsfile mit Passwort-Leak ❌ ^ Jenkinsfile mit Secret-Helper-Function ✔️ ^ | ||
| + | | < | ||
| + | <code groovy> | ||
| + | environment { | ||
| + | DB_USER | ||
| + | DB_PASSWORD | ||
| + | } | ||
| + | ... | ||
| + | steps { | ||
| + | sh """ | ||
| + | docker run -d \ | ||
| + | --name $DB_CONTAINER \ | ||
| + | --restart unless-stopped \ | ||
| + | --network infra-net \ | ||
| + | -e POSTGRES_USER=$DB_USER \ | ||
| + | -e POSTGRES_PASSWORD=$DB_PASSWORD \ | ||
| + | -e POSTGRES_DB=$DB_NAME \ | ||
| + | -v $DB_VOLUME:/ | ||
| + | -v $WORKSPACE/ | ||
| + | postgres: | ||
| + | """ | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | <code groovy> | ||
| + | def withDbCredentials(body) { | ||
| + | withCredentials([ | ||
| + | usernamePassword( | ||
| + | credentialsId: | ||
| + | usernameVariable: | ||
| + | passwordVariable: | ||
| + | ) | ||
| + | ]) { | ||
| + | body() | ||
| + | } | ||
| + | } | ||
| + | ... | ||
| + | steps { | ||
| + | withDbCredentials { | ||
| + | sh """ | ||
| + | docker run -d \ | ||
| + | --name $DB_CONTAINER \ | ||
| + | --restart unless-stopped \ | ||
| + | --network infra-net \ | ||
| + | -e POSTGRES_USER=$DB_USER \ | ||
| + | -e POSTGRES_PASSWORD=$DB_PASSWORD \ | ||
| + | -e POSTGRES_DB=$DB_NAME \ | ||
| + | -v $DB_VOLUME:/ | ||
| + | -v $WORKSPACE/ | ||
| + | postgres: | ||
| + | """ | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Ein wichtiger Grundsatz bezüglich der Sicherheit von Jenkins-Secrets lautet: "Wenn ein Benutzer eine Pipeline editieren kann, kann er in der Regel auch Secrets exfiltrieren." | ||
| - | '' | ||