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 17:43] – apeter | de:modul:ffit:3-jahr:cicd:learningunits:lu12:a [2026/05/18 23:27] (aktuell) – apeter | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== LU12a - Jenkins Secrets ====== | ====== LU12a - Jenkins Secrets ====== | ||
| + | Lokal werden Secrets oft in privaten '' | ||
| - | Anstatt Secrets direkt in die Jenkinsfile-Datei zu schreiben, wo es für alle mit Lesezugriff auf das Code-Repository lesbar wäre, können auf Jenkins | + | 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) | | ||
| - | ^ Unsicher | + | 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 | ||
| | < | | < | ||
| <code groovy> | <code groovy> | ||
| environment { | environment { | ||
| + | DB_USER | ||
| DB_PASSWORD | DB_PASSWORD | ||
| - | DB_NAME | ||
| } | } | ||
| ... | ... | ||
| steps { | steps { | ||
| sh """ | sh """ | ||
| - | docker build -t $BACKEND_CONTAINER backend/ | ||
| - | | ||
| - | docker stop $BACKEND_CONTAINER || true | ||
| - | docker rm $BACKEND_CONTAINER || true | ||
| - | |||
| docker run -d \ | docker run -d \ | ||
| - | --name $BACKEND_CONTAINER | + | --name $DB_CONTAINER |
| --restart unless-stopped \ | --restart unless-stopped \ | ||
| --network infra-net \ | --network infra-net \ | ||
| - | -e DATABASE_URL=" | + | -e POSTGRES_USER=$DB_USER |
| - | $BACKEND_CONTAINER | + | -e POSTGRES_PASSWORD=$DB_PASSWORD |
| + | -e POSTGRES_DB=$DB_NAME \ | ||
| + | -v $DB_VOLUME:/var/ | ||
| + | | ||
| + | postgres:17 | ||
| """ | """ | ||
| } | } | ||
| Zeile 46: | Zeile 53: | ||
| withDbCredentials { | withDbCredentials { | ||
| sh """ | sh """ | ||
| - | docker build -t $BACKEND_CONTAINER backend/ | ||
| - | | ||
| - | docker stop $BACKEND_CONTAINER || true | ||
| - | docker rm $BACKEND_CONTAINER || true | ||
| - | |||
| docker run -d \ | docker run -d \ | ||
| - | --name $BACKEND_CONTAINER | + | --name $DB_CONTAINER |
| --restart unless-stopped \ | --restart unless-stopped \ | ||
| --network infra-net \ | --network infra-net \ | ||
| - | -e DATABASE_URL=" | + | -e POSTGRES_USER=$DB_USER |
| - | $BACKEND_CONTAINER | + | -e POSTGRES_PASSWORD=$DB_PASSWORD |
| + | -e POSTGRES_DB=$DB_NAME \ | ||
| + | -v $DB_VOLUME:/var/ | ||
| + | | ||
| + | postgres:17 | ||
| """ | """ | ||
| } | } | ||
| Zeile 63: | Zeile 69: | ||
| </ | </ | ||
| + | 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." | ||
| - | * Aktueller Stand | ||
| - | * .env-Files | ||
| - | * Secrets in Github | ||
| - | * Secrets in Jenkins | ||
| - | * Sonar-Token | ||
| - | * Webhook? | ||
| - | |||
| - | '' | ||