Ich schreibe eine Jenkins-Pipeline als Code für eine Android-Anwendung.
Ich habe die folgenden Zeichenfolgen:
BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
Ich möchte eine andere Variable namens artifact_name definieren, die wie folgt aussieht:
product_name-BUILDFLAV(in lowercase)-BUILDTYPE(in lowercase).apk
zum Beispiel:
App01-staging-debug.apk
Da ich neu in Groovy bin, bin ich mir nicht sicher, ob ich es richtig mache.
Ich habe 2 Variablen definiert:
aa = BUILDFLAV[0].toLowerCase()+BUILDFLAV.substring(1)
bb = BUILDTYPE[0].toLowerCase()+BUILDTYPE.substring(1)
Dadurch kann ich das erste Zeichen jeder Zeichenfolge von Groß- in Kleinbuchstaben ändern.
Dann möchte ich, dass die Variable artifact_name so aussieht:
App01-$(aa}-${bb}.apk
Also habe ich so etwas ausprobiert:
artifact_name = "App01-${BUILDFLAV[0]}.toLowerCase()+${BUILDFLAV}.substring(1)+${BUILDTYPE[0]}.toLowerCase()+${BUILDTYPE}.substring(1).apk"
Aber es gibt mir einen Fehler.
Dies zu tun hat jedoch funktioniert, aber es scheint eine elegantere Möglichkeit zu geben, dies zu tun:
BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
aa = BUILDFLAV[0].toLowerCase()+BUILDFLAV.substring(1)
bb = BUILDTYPE[0].toLowerCase()+BUILDTYPE.substring(1)
ARTIFACT_NAME = "App01-${aa}-${bb}.apk"
Wenn Sie sich fragen, warum ich die Variablen nicht von Anfang an in Kleinbuchstaben schreibe, weil die Gradle-Task, die im Build ausgeführt wird, die Konvention in Großbuchstaben verwendet und das, was ich erreichen möchte, mit einem fortgeschritteneren Schritt zusammenhängt des Builds.
Ist es möglich, dasselbe Ergebnis zu erzielen, indem ich das mache, was ich in den Vars "aa" und "bb" in nur einer Zeile gemacht habe? wie das obige Beispiel mit artifact_name ...
Wenn Sie Templates in Groovy-Formaten verwenden möchten, können Sie sie wie zuvor in ${..}
einfügen. Allerdings müssen Sie alles, was ausgeführt werden muss, in das Verzeichnis einfügen.
Also verwenden
ARTIFACT_NAME = "App01-${BUILDFLAV[0].toLowerCase()}${BUILDFLAV.substring(1).toLowerCase()-${BUILDTYPE[0].toLowerCase()}${BUILDTYPE.substring(1).toLowerCase()}.apk"`
Beachten Sie jedoch, dass es nicht notwendig ist, das erste Zeichen in Kleinbuchstaben umzuwandeln und dann den Rest anzufügen. Beim nächsten wird dasselbe Ergebnis erzielt
`ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"`
Wenn Sie es trotzdem wollen, können Sie BUILDTYPE[1..-1]
anstelle von BUILDTYPE.substring(1)
verwenden.
Dumbed down/andere Erklärungsweise Riks Antwort für alle, die wissen wollen, wie man das auf allgemeiner Ebene macht:
Evaluated Groovy script
Die mit %
Umschlossenen Variablen wie %Var%
Durch ihren tatsächlichen Wert mit dem folgenden Textblock:def map = [%New_Var%: %Old_Var%.toUpperCase()]
return map
Dann können Sie überprüfen, ob es unter Linux funktioniert: echo $New_Var
Und Windows als: echo %New_Var%
Als Beispiel,
Angenommen, Sie haben einen Parameter mit dem Namen Label
, den Sie auf Hello
gesetzt haben.
def map = [ucase_Label: Label.toUpperCase()]
return map
echo $ucase_Label
HELLO
Und wenn Sie den Wert angehängt/vorangestellt benötigen, können Sie Dinge tun wie:def map = [newString: "some_String"+Label.toUpperCase()]