Wub*_*tor 7 groovy boolean jenkins
我有一个调用groovy脚本的Jenkins作业,groovy脚本使用Jenkins参数来完成它的工作.除了布尔参数,我可以检索所有参数而没有问题.布尔参数是Jenkins中的复选框

我将jenkins参数读入Groovy,如下所示:
boolean libraryBranch = config.get('library_branch_feature');
Run Code Online (Sandbox Code Playgroud)
现在当我打印'libraryBranch'变量时
out.println "-- Library branch feature?: " + libraryBranch.toString();
Run Code Online (Sandbox Code Playgroud)
我得到以下印刷品:
- 图书馆分支功能?:true
因此,如果选择了布尔Jenkins参数并不重要,我在Groovy中总是有一个布尔值'true'.读取同一作业中的所有其他(字符串)参数没有问题.
有人可以帮我解决这个问题吗?
编辑
好的我已经决定尝试以其他几种方式检索代码并找到一个好的解决方案:
Boolean libraryBranch = build.buildVariableResolver.resolve("library_branch_feature");
String libraryBranchString = build.buildVariableResolver.resolve("library_branch_feature").toString();
Boolean libraryBranchStringAsBoolean = build.buildVariableResolver.resolve("library_branch_feature") as Boolean;
Run Code Online (Sandbox Code Playgroud)
然后打印上述变量:
out.println "-- Library branch feature?: " + libraryBranch;
out.println "-- Library branch feature to String: " + libraryBranch.toString();
out.println "-- Library branch feature to String: " + libraryBranch.toString();
out.println "-- Library branch feature as String: " + libraryBranchString;
out.println "-- Library branch feature String as Boolean: " + libraryBranchStringAsBoolean;
Run Code Online (Sandbox Code Playgroud)
以上打印件的输出结果如下:
-- Library branch feature?: true
-- Library branch feature to String: true
-- Library branch feature to String: true
-- Library branch feature as String: false
-- Library branch feature String as Boolean: true
Run Code Online (Sandbox Code Playgroud)
因此,将布尔值正确读取为false的唯一方法是不将其转换为布尔值,而只是将其作为字符串读取并将其用作字符串.
我宁愿使用它作为布尔值,所以任何有关此事的建议仍然受到赞赏.
Wub*_*tor 17
答案是将Jenkins参数读为String,然后使用方法.toBoolean()将其转换为布尔值.所以我的libraryBranch现在设置如下:
boolean libraryBranch = build.buildVariableResolver.resolve("library_branch_feature").toString().toBoolean();
Run Code Online (Sandbox Code Playgroud)
Ste*_*sed 12
问题和答案有点过时了。使用布尔参数的现代方法是使用params.全局值。params
正确公开布尔参数,以便以下参数都可以工作并且不需要字符串/布尔转换。
if (params.library_branch_feature) {
// truth logic here
}
// or
if (params.library_branch_feature != false) {
// truth logic here
}
Run Code Online (Sandbox Code Playgroud)
来自参数的管道语法。:
将构建中定义的所有参数公开为具有各种类型值的只读映射。例子:
if (params.BOOLEAN_PARAM_NAME) {doSomething()} 或提供一个重要的默认值:
if (params.getOrDefault('BOOLEAN_PARAM_NAME', true)) {doSomething()}
注意:布尔参数可以没有值可能没有意义,但“.getOrDefault()”对于设置字符串参数的默认值很有用。
出于好奇,我尝试了以下操作:
在管道设置中将变量“testmode”设置为布尔值。启动作业,将 testmode 设置为 false(未选中)。在管道脚本中,进入后立即运行以下代码:
testmode=testmode.toBoolean()
if (testmode==false) { print "testmode tests true"}else{print "testmode tests false"}
Run Code Online (Sandbox Code Playgroud)
您将看到结果“testmode 测试为假”。
为了验证我的声明,即 'boolean' 变量 testmode 在它进来时实际上是一个字符串,我尝试了:
testmode=testmode.toBoolean()
testmode=testmode.toBoolean()
Run Code Online (Sandbox Code Playgroud)
它在第二个“toBoolean”中爆炸了。我会饶恕你的错误信息...
因此,我声称 testmode 以字符串“false”而不是布尔值的形式出现(无论是因为晋升、降级、强制还是其他原因)。
所以,如果它是一个布尔参数,并且你真的想把它当作一个布尔值而不是说'if (booleanvar=="true")',那么把它转换成一个布尔值,你就完成了。
| 归档时间: |
|
| 查看次数: |
19863 次 |
| 最近记录: |