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

  • de/modul/ffit/3-jahr/cicd/learningunits/lu12/a.1778781984.txt.gz
  • Zuletzt geändert: 2026/05/14 20:06
  • von apeter