Ich habe ein paar Build-Skripte, die ich in meinem Jenkins CI-Server arbeiten. Um die Dinge organisiert zu halten, tendiere ich dazu, jeden Abschnitt "Shell ausführen" des Jobs kleiner und isoliert im Umfang zu halten.Behalten konfigurierte Variablen zwischen "Execute Shell" -Abschnitten in Jenkins
Angenommen, ich baue einen Zeichenfolgenwert auf, den ich später an verschiedenen Stellen in meinem Job verwenden möchte. (ZB Name der Tags, Nachricht mit dem Tag zugeordnet ist, Datumsformat, etc ...)
Execute Shell #1
# Utilizing Multiple Lines and temporary variables for readability
tagName="$tagName_Sub1 $tagName_Sub2 $tagName_Sub3"
Execute Shell #2
# Build Script - tagName is an argument to my build script
run build_job $tagName
Execute Shell #3
# Tag Git
git tag -a $tagName
Execute Shell #4
# Something else
echo "Hello World, $tagName"
Es sieht aus, als was Sie eigentlich wollen, ist ein Array, keine Zeichenfolge. Berücksichtigen Sie * das Definieren * eines Arrays: 'tagNames = (" $ tagName_Sub1 "" $ tagName_Sub2 "" $ tagName_Sub3 ")', dann verwenden Sie es entsprechend mit '" $ {tagNames [@]} "'. –
Andernfalls haben Sie eine sehr unangenehme Zeit, wenn Sie versuchen, einen Tag-Namen mit einem literalen Leerzeichen darin zu verwenden, mit Leerzeichen, die temporär zu IFS hinzugefügt wurden oder die als interpretiert werden können glob, der dem Dateisysteminhalt entspricht. –
... siehe http://mywiki.wooledge.org/BashFAQ/050 - die Vorbehalte und Hinweise in diesem Abschnitt gelten für jeden Fall, in dem '$ foo' (ohne umgebende doppelte Anführungszeichen) als Teil der Befehlszeilengenerierung verwendet wird. –