Dies ist eine alte Version des Dokuments!
LU12a - Jenkins Secrets
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 „secrets“ hinterlegt werden.
| Typ | Zweck | Beispiele | Verwendung in Pipeline |
|---|---|---|---|
| Secret text | Einzelner String-Wert | API Keys, Tokens | withCredentials([string(...)]) |
| Username/Password | Login-Paare | DB, Docker Registry | withCredentials([usernamePassword(...)]) |
| SSH Key | SSH Zugriff | Server Deploy, Git SSH | sshUserPrivateKey |
| Secret file | Datei als Secret | kubeconfig, JSON Keys, Zertifikate | file(credentialsId, ...) |
| Certificate | X.509 Zertifikate | mTLS, interne APIs | Zertifikatsbasierte Auth |
| Jenkinsfile mit Passwort-Leak ❌ | Jenkinsfile mit Secret-Helper-Function ✔️ |
|---|---|
environment { DB_PASSWORD = "apppassword" DB_NAME = "appdb" } ... 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:/var/lib/postgresql/data \ -v $WORKSPACE/database:/docker-entrypoint-initdb.d \ postgres:17 """ } | def withDbCredentials(body) { withCredentials([ usernamePassword( credentialsId: 'postgres-creds', usernameVariable: 'DB_USER', passwordVariable: 'DB_PASSWORD' ) ]) { 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:/var/lib/postgresql/data \ -v $WORKSPACE/database:/docker-entrypoint-initdb.d \ postgres:17 """ } } |
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.“
- .env-Files
- Secrets in Github
- Secrets in Jenkins
- Sonar-Token
- Webhook?
TODO