Laden Sie die Datei mit Umgebungsvariablen Jenkins Pipeline
Ich mache eine einfache pipeline:
Bauen -> Staging -> Produktion
Brauche ich verschiedene Umgebungsvariablen für die Inszenierung und Produktion, so versuche ich Quelle Variablen.
sh 'source $JENKINS_HOME/.envvars/stacktest-staging.sh'
Aber es gibt Nicht gefunden
[Stack Test] Running shell script
+ source /var/jenkins_home/.envvars/stacktest-staging.sh
/var/jenkins_home/workspace/Stack Test@tmp/durable-bcbe1515/script.sh: 2: /var/jenkins_home/workspace/Stack Test@tmp/durable-bcbe1515/script.sh: source: not found
Den Pfad richtig ist, weil ich den gleichen Befehl ausführen, wenn ich mich einloggen via ssh, und es funktioniert gut.
Hier ist die pipeline-Idee:
node {
stage name: 'Build'
//git and gradle build OK
echo 'My build stage'
stage name: 'Staging'
sh 'source $JENKINS_HOME/.envvars/stacktest-staging.sh' //PROBLEM HERE
echo '$DB_URL' //Expects http://production_url/my_db
sh 'gradle flywayMigrate' //To staging
input message: "Does Staging server look good?"
stage name: 'Production'
sh 'source $JENKINS_HOME/.envvars/stacktest-production.sh'
echo '$DB_URL' //Expects http://production_url/my_db
sh 'gradle flywayMigrate' //To production
sh './deploy.sh'
}
Was soll ich tun?
- Ich war denken nicht mit dem pipeline (aber ich werde nicht in der Lage sein, um meine Jenkinsfile).
- Oder machen verschiedene jobs für die Inszenierung und Produktion, mit EnvInject Plugin (Aber ich verliere meine Bühne view)
- Oder machen withEnv (aber der code wird groß, denn heute arbeite ich mit 12 env vars)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen Weg, den Sie laden konnte environment-Variablen aus einer Datei laden Sie eine Groovy Datei.
Beispiel:
In dieser Datei definieren Sie 2 Umwelt-Variablen, die Sie laden möchten
Können Sie dann laden Sie diese in mit
Dann können Sie Sie in den nachfolgenden echo/shell Schritte.
Zum Beispiel, hier ist eine kurze pipeline Skript:
withEnv
konstruieren.load "myenvvars.groovy"
.Aus den Kommentaren zu den akzeptierte Antwort
Nicht verwenden Globale 'env' verwenden aber 'withEnv' konstruieren, z.B. zu sehen:
Ausgabe #9: nicht festgelegt env vars mit globalen env in top 10 der besten Praktiken jenkins pipeline plugin
Im folgenden Beispiel: VAR1 ist eine einfache java-string (kein groovy-variable expansion), VAR2 ist ein groovy-string (also die variable 'someGroovyVar' erweitert).
Dem übergebenen Skript ist eine einfache java-string, also $VAR1 und $VAR2 übergeben werden buchstäblich auf die Schale, und die echo ' s sind auf environment-Variablen VAR1 und VAR2.
Für Geheimnisse /Kennwörter, die Sie verwenden können, Anmeldeinformationen Bindung plugin
Beispiel:
HINWEIS: CREDENTIALS_ID1 ist eine eingetragene Benutzername/Passwort secret auf dem Jenkins-Einstellungen.
Den jenkisn Konsole log-Ausgabe verbirgt sich der real-Werte:
Jenkins und Anmeldeinformationen ist ein großes Problem, wahrscheinlich sehen: Anmeldeinformationen plugin
Vollständigkeit halber: die Meisten der Zeit, müssen wir die Geheimnisse, die in der environment-Variablen, wie wir Sie verwenden von shell-Skripten, also kombinieren wir die withCredentials und withEnv wie folgt:
withEnv
Schritt.withEnv
lokal ist nur der Schritt, während env var global ist. (das ist der Punkt, der Frage #9: nicht festgelegt env vars mit globalen env).Einen anderen Weg zur Lösung dieses installieren "Pipeline-Dienstprogramm Schritte" - plugin, das bietet uns readProperties-Methode ( zum Verweis bitte auf den link gehen,https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#pipeline-utility-steps)
Hier im Beispiel sehen wir, dass Sie speichern die Schlüssel in einem array und verwenden Sie die Tasten, um den Wert abzurufen.
Aber in diesem Fall die in der Produktion das problem wird sein, wie wenn wir alle Variablen, die später in die property-Datei, die variable Hinzugefügt werden muss in die Reihe der Jenkins-Datei als auch.
Um loszuwerden, diese enge Kopplung, können wir code schreiben, der in einer solchen Art und Weise, so dass den Jenkins-build-Umgebung bekommen können automatisch Informationen über alle vorhandenen Tasten präsentiert, die derzeit in der Property-Datei. Hier ist ein Beispiel für die Referenz
- Und der client-code sieht wie
Wenn Sie mit Jenkins 2.0 Sie können das laden der property-Datei (die darin besteht, alle erforderlichen Umgebungsvariablen zusammen mit Ihren entsprechenden Werten) und Lesen Sie alle environment-Variablen aufgelistet, die es automatisch und injizieren es in die Jenkins zur Verfügung gestellt env Einheit.
Hier ist eine Methode, die führt, die die oben genannten Aktion.
Um diese Methode aufrufen, müssen wir übergeben den Pfad der property-Datei als string-variable Zum Beispiel, in unserem Jenkins-Datei mit groovy-Skript, das wir nennen können, wie
Bitte Fragen Sie mich, wenn Sie irgendwelche Zweifel haben,