Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| de:modul:ffit:3-jahr:cicd:learningunits:lu12:a [2026/04/28 14:18] – angelegt 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 '' | ||
| + | |||
| + | Die verschiedenen Typen von " | ||
| + | |||
| + | ^ Typ ^ Zweck ^ Beispiele ^ Verwendung in Pipeline ^ | ||
| + | | Secret text | Einzelner String-Wert | API Keys, Tokens | <code groovy> | ||
| + | | Username/ | ||
| + | | SSH Key | SSH Zugriff | Server Deploy, Git SSH | <code groovy> | ||
| + | | Secret file | Datei als Secret | kubeconfig, JSON Keys, Zertifikate | <code groovy> | ||
| + | | Certificate | X.509 Zertifikate | mTLS, interne APIs | Zertifikatsbasierte Auth (zum Beispiel für Webhooks) | | ||
| + | |||
| + | Nachfolgend ist die Verwendung in einem Jenkinsfile zu sehen. Die separate Helper-Function sorgt dafür, dass bei mehreren Stages nicht die Secret-ID mehrfach angegeben werden muss. | ||
| + | |||
| + | ^ 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." | ||
| - | '' | ||