Wie in so vielen CI/CD Tools kennt auch Jenkins das Prinzip von Secrets. Dabei kann man Benutzername/Passwort, nur Passwort, SSH Keys usw. im System hinterlegen und dann innerhalb von Build Jobs darauf zugreifen. Sollte der Inhalt des Secrets irgendwo im Build Log ausgegeben werden, ist Jenkins sogar so schlau das ganze mit **** zu maskieren. An sich also ein sehr praktisches System. Kommt man nun aber wie ich an den Punkt, dass man Secrets in Jenkins hat, aber sie dummerweise nirgendwo anders gespeichert hat, dann ist das ein Problem.
Aber es gibt eine Lösung, die ich hier gefunden habe: https://stackoverflow.com/questions/34795050/how-do-i-list-all-of-my-jenkins-credentials-in-the-script-console
Man öffnet im Jenkins einfach die Script Konsole ([JENKINS_URL]/manage/script) und fügt dort folgendes Script ein, und lässt es dann ausführen:
import java.nio.charset.StandardCharsets; def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials( com.cloudbees.plugins.credentials.Credentials.class ) for (c in creds) { println(c.id) if (c.properties.description) { println(" description: " + c.description) } if (c.properties.username) { println(" username: " + c.username) } if (c.properties.password) { println(" password: " + c.password) } if (c.properties.passphrase) { println(" passphrase: " + c.passphrase) } if (c.properties.secret) { println(" secret: " + c.secret) } if (c.properties.secretBytes) { println(" secretBytes: ") println("\n" + new String(c.secretBytes.getPlainData(), StandardCharsets.UTF_8)) println("") } if (c.properties.privateKeySource) { println(" privateKey: " + c.getPrivateKey()) } if (c.properties.apiToken) { println(" apiToken: " + c.apiToken) } if (c.properties.token) { println(" token: " + c.token) } if (c.properties.subscriptionId) { println(" subscriptionId: " + c.subscriptionId) } if (c.properties.clientId) { println(" clientId: " + c.clientId) } if (c.properties.tenant) { println(" tenant: " + c.tenant) } if (c.properties.clientSecret) { println(" clientSecret: " + c.clientSecret) } if (c.properties.plainClientSecret) { println(" plainClientSecret: " + c.plainClientSecret) } println("") }
Anschließend werden in der Ausgabe alle Secrets mit ihrem hinterlegten Namen und ihren Inhalten ausgegeben.