我正在编写Jenkins管道作为Android应用程序的代码。
我有以下字符串:
BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
我想定义另一个名为artifact_name的变量,它看起来像:
product_name-BUILDFLAV(in lowercase)-BUILDTYPE(in lowercase).apk
例如:
App01-staging-debug.apk
因为我是新手,所以我不确定我是否正确地做到了。
我已经定义了2个变量:
aa = BUILDFLAV[0].toLowerCase()+BUILDFLAV.substring(1)
bb = BUILDTYPE[0].toLowerCase()+BUILDTYPE.substring(1)
这允许我将每个字符串的第一个字符从大写更改为小写。
然后,我希望artifact_name变量看起来像这样:
App01-$(aa}-${bb}.apk
所以我尝试过这样的事情:
artifact_name = "App01-${BUILDFLAV[0]}.toLowerCase()+${BUILDFLAV}.substring(1)+${BUILDTYPE[0]}.toLowerCase()+${BUILDTYPE}.substring(1).apk"
但它给我一个错误。
然而,这样做有效,但似乎有一种更优雅的方式:
BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
aa = BUILDFLAV[0].toLowerCase()+BUILDFLAV.substring(1)
bb = BUILDTYPE[0].toLowerCase()+BUILDTYPE.substring(1)
ARTIFACT_NAME = "App01-${aa}-${bb}.apk"
如果你问自己为什么我没有从一开始就用小写设置变量是因为在构建中运行的gradle任务是使用第一个字母大写约定和我试图实现的与构建的更高级步骤有关。
通过我在vars" aa"中所做的事情,是否有可能实现相同的结果?和" bb"在一行?像上面带有artifact_name的例子......
答案 0 :(得分:9)
如果你想在groovy中使用字符串中的模板,你可以把它放在${..}
里面,就像你已经做过的那样。
但是,您需要将需要执行的所有内容放入其中。
所以使用
ARTIFACT_NAME = "App01-${BUILDFLAV[0].toLowerCase()}${BUILDFLAV.substring(1).toLowerCase()-${BUILDTYPE[0].toLowerCase()}${BUILDTYPE.substring(1).toLowerCase()}.apk"`
但请注意,没有必要将第一个char转换为小写,然后附加其余的char。接下来会给出相同的结果
`ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"`
如果您出于某种原因想要这样做,您可以使用BUILDTYPE[1..-1]
代替BUILDTYPE.substring(1)
答案 1 :(得分:1)
对于想要知道如何在一般级别执行此操作的任何人解释Rik's answer的方式不明白/不同:
Evaluated Groovy script
字段中,将%
包裹的变量(例如%Var%
)替换为其实际值,并使用以下后续文本块: def map = [%New_Var%: %Old_Var%.toUpperCase()]
return map
然后您可以验证它适用于Linux:echo $New_Var
Windows为:echo %New_Var%
举个例子,
假设您有一个名为Label
的参数,您已将其设置为Hello
def map = [ucase_Label: Label.toUpperCase()]
return map
echo $ucase_Label
HELLO
如果你需要附加/前置的值,你可以做类似的事情
def map = [newString: "some_String"+Label.toUpperCase()]