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 ...
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)
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:
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()]