wake-up-neo.com

Groovy: Wie definiere ich einen manipulierten String als Variable?

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 ...

5
Itai Ganot

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.

8
Rik

Dumbed down/andere Erklärungsweise Riks Antwort für alle, die wissen wollen, wie man das auf allgemeiner Ebene macht:

  1. Erwerben Sie ein Plugin, mit dem Sie Variablen über Groovy-Skripte einfügen können
  2. Ersetzen Sie im Feld 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()]

1