jenkins - Groovy:如何将操作字符串定义为变量?

标签 jenkins groovy jenkins-pipeline

我正在编写一个 Jenkins 管道作为 Android 应用程序的代码。

我有以下字符串:

BUILDFLAV = "Staging"
BUILDTYPE = "Debug"

我想定义另一个名为 artifact_name 的变量,它看起来像:
product_name-BUILDFLAV(in lowercase)-BUILDTYPE(in lowercase).apk

例如:
App01-staging-debug.apk

因为我是 groovy 的新手,所以我不确定我是否正确地做这件事。

我定义了两个变量:
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 的示例...

最佳答案

如果你想在groovy中在字符串中使用模板,你可以把它放在${..}里面就像你已经做的那样。
但是,您需要将需要执行的所有内容放入其中。

所以用

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

但请注意,没有必要将第一个字符转换为小写然后附加其余字符。下一个将给出相同的结果
`ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"`

如果您出于任何原因想要这样做,您可以使用 BUILDTYPE[1..-1]而不是 BUILDTYPE.substring(1)

关于jenkins - Groovy:如何将操作字符串定义为变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40450338/

相关文章:

jenkins - 如何在WebSphere 8.5上安装Jenkins

没有管理器的 Grails Spring Security Ldap

groovy - Gradle WAR 插件 : how to find destination for files to copy

带有子字符串提取的 jenkinsfile 设置环境变量

android - Jenkins - 使用 Genymotion VM 而不是 Android Emulator

jenkins - 在 Jenkins 中锁定并行阶段

java - Jenkins 从属重复工作区

java - Groovy 将装箱类型传递给 Jenkins,如何拆箱?

Jenkins 管道 "waitUntil"- 更改尝试之间的延迟

jenkins - Jenkinsfile 中的 Anaconda