【问题标题】:Jenkins file can we use the IF statementJenkins文件我们可以使用IF语句吗
【发布时间】:2020-01-23 18:08:26
【问题描述】:

在 Jenkins 文件中,变量之一是逗号分隔值,如下所示。

infra_services=[abc,def,xyz]

当我编写下面的代码时,它抛出了一个错误。

if ("{$Infra_Services}".contains("xyz"))
    then
 echo "$Infra_Services"
fi

【问题讨论】:

  • 可以分享一下错误信息吗?
  • hudson.remoting.ProxyException: groovy.lang.MissingPropertyException: 没有这样的属性:str 类: org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53) 的 WorkflowScript .codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:458) 在 com.cloudbees.groovy.cps.sandbox.DefaultInvoker.getProperty(DefaultInvoker.java:39) 在 com.cloudbees.groovy.cps.impl.PropertyAccessBlock .rawGet(PropertyAccessBlock.java:20) 在 WorkflowScript.run(WorkflowScript:23)

标签: jenkins jenkins-groovy


【解决方案1】:

是的,您可以在 Jenkinsfile 中执行 if 语句。但是,如果您使用的是声明式管道,则需要使用步骤 script 来支持它。

您的问题来自于您没有在“abc”和数组的所有元素周围加上任何双引号

infra_services=[abc,def,xyz]

​ 修复此问题后将引发第二个错误。如果infra_services 是一个数组,要对其进行操作,您不应尝试将其转换为字符串。当你执行“{$Infra_Services}”

时它应该抛出

这是一个工作示例

​def Infra_Services = ["abc","def","xyz"]

if (Infra_Services.contains("xyz")) {
   println "found"
}​​

我的建议是在 jenkins 上运行之前测试你的 groovy,你将获得宝贵的时间。这是一个很好的在线 groovy 控制台,我用来测试我的代码。从终端运行 groovy 控制台是一种替代方法

https://groovyconsole.appspot.com/

【讨论】:

  • 感谢您的回复。实际上,我正在尝试阅读 Jenkins 工作中的 JIRA 问题值。一个是复选框字段包含 5 个以逗号分隔的值。在该字段值中,我已拆分为单独的值并使用 If 语句进行搜索
  • 这是另一个问题。我会尝试类似def output = "hello ABC-103"; def (isJiraIssue) = output =~ /(?<!([A-Za-z]{1,10})-?)[A-Z]+-\d+/; println isJiraIssue [0]​
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 2021-04-10
  • 2011-08-06
  • 1970-01-01
  • 2020-06-06
  • 2015-01-08
相关资源
最近更新 更多