web-dev-qa-db-fra.com

Groovy: Comment définir une chaîne manipulée en tant que variable?

J'écris un pipeline Jenkins en tant que code pour une application Android.

J'ai les chaînes suivantes:

BUILDFLAV = "Staging"
BUILDTYPE = "Debug"

Je veux définir une autre variable appelée nom_tefact qui ressemblera à ceci:

product_name-BUILDFLAV(in lowercase)-BUILDTYPE(in lowercase).apk

par exemple:

App01-staging-debug.apk

Depuis que je suis nouveau sur groovy, je ne suis pas sûr de le faire correctement.

J'ai défini 2 variables:

aa = BUILDFLAV[0].toLowerCase()+BUILDFLAV.substring(1)
bb = BUILDTYPE[0].toLowerCase()+BUILDTYPE.substring(1)

Cela me permet de changer le premier caractère de chaque chaîne de majuscule à minuscule.

Ensuite, je veux que la variable artifact_name ressemble à ceci:

App01-$(aa}-${bb}.apk

J'ai donc essayé quelque chose comme ça:

artifact_name = "App01-${BUILDFLAV[0]}.toLowerCase()+${BUILDFLAV}.substring(1)+${BUILDTYPE[0]}.toLowerCase()+${BUILDTYPE}.substring(1).apk"

Mais cela me jette une erreur.

Faire cela, cependant, a fonctionné, mais il semble y avoir une manière plus élégante de le faire:

BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
aa = BUILDFLAV[0].toLowerCase()+BUILDFLAV.substring(1)
bb = BUILDTYPE[0].toLowerCase()+BUILDTYPE.substring(1)
ARTIFACT_NAME = "App01-${aa}-${bb}.apk"

Si vous vous demandez pourquoi je ne mets pas les variables en minuscule depuis le début, c'est parce que la tâche de gradle qui est exécutée dans la construction utilise la convention de la première lettre en majuscule et que j'essaie de réaliser est liée à une étape plus avancée. de la construction.

Est-il possible d'obtenir le même résultat en faisant ce que j'ai fait dans vars "aa" et "bb" en une seule ligne? comme dans l'exemple ci-dessus avec nom_tefact ...

5
Itai Ganot

Si vous souhaitez utiliser des modèles dans des chaînes de caractères groovy, vous pouvez le placer dans ${..} comme vous l'avez déjà fait. Cependant, vous devez y mettre tout ce qui doit être exécuté. 

Donc utiliser 

ARTIFACT_NAME = "App01-${BUILDFLAV[0].toLowerCase()}${BUILDFLAV.substring(1).toLowerCase()-${BUILDTYPE[0].toLowerCase()}${BUILDTYPE.substring(1).toLowerCase()}.apk"`

Mais notez bien qu’il n’est pas nécessaire de convertir le premier caractère en minuscule, puis d’ajouter le reste. La prochaine donnera le même résultat

`ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"`

Si pour une raison quelconque vous voulez le faire comme ça quand même, vous pouvez utiliser BUILDTYPE[1..-1] au lieu de BUILDTYPE.substring(1)

8
Rik

Dumbed down/une manière différente d’expliquer La réponse de Rik pour tous ceux qui veulent savoir comment faire cela au niveau général:

  1. Acquérir un plugin qui vous permet d'injecter des variables via des scripts Groovy
  2. Dans le champ Evaluated Groovy script, remplacez les variables encapsulées avec % comme %Var% par leur valeur réelle par le bloc de texte suivant:

def map = [%New_Var%: %Old_Var%.toUpperCase()]
return map

Ensuite, vous pouvez vérifier que cela fonctionne pour Linux en tant que: echo $New_Var 
Et Windows en tant que: echo %New_Var% 

Par exemple,

Supposons que vous avez un paramètre nommé Label, que vous avez défini à Hello

def map = [ucase_Label: Label.toUpperCase()]
return map

echo $ucase_Label

HELLO

Et si vous avez besoin de la valeur ajoutée/ajoutée, vous pouvez faire des choses comme, 
def map = [newString: "some_String"+Label.toUpperCase()]

1
kayleeFrye_onDeck