【问题标题】:Get name of file in Jenkinsfile在 Jenkinsfile 中获取文件名
【发布时间】:2018-06-13 10:38:45
【问题描述】:

我正在创建一个 jenkinsfile,我需要将文件名的一部分存储在一个变量中,以检查它是否有单词。例如,如果名称是:project-x.y.z-TEST.ext 我想知道它是否以 -TEST 结尾。从 bash 中返回 TEST 字(如果它在名称中):

$(echo ${$(ls - b *.ext | head -1)##*-} | cut -f 1 -d '.')

但我不能将它存储在我的 jenkinsfile 的变量中(或者不知道如何)。还有其他方法可以在 jenkinsfile 中检查吗?

【问题讨论】:

  • 使用正则表达式。
  • @MattSchuchard 你能在变量中发布一个正则表达式的例子吗?
  • 好的,我会发布一个答案。

标签: bash jenkins jenkins-pipeline


【解决方案1】:

对字符串执行正则表达式并将捕获存储在变量中的语法是:

var = string =~ /regex/

例如,使用您希望将捕获存储在变量中的字符串 project-x.y.z-TEST.ext 示例,我们可以这样做:

var = 'project-x.y.z-TEST.ext' =~ /-([A-Z]+)\.ext/

这将返回true 以进行成功的正则表达式检查,然后捕获TEST。然后将字符串TEST 分配给变量var

如果将文件名字符串分配给变量filename,我们将其更改为:

var = filename =~ /-([A-Z]+)\.ext/

但是,由于您最初的问题是仅检查文件名中是否包含字符串,因此您可能真正想要的是检查文件名中的字符串并存储布尔结果。这不是存储字符串的该部分以稍后执行相等条件检查。在这种情况下,您真正​​需要的是:

test = filename =~ /-TEST\.ext/

并且测试将存储true 以供将来有条件地使用。

这里需要注意三件重要的事情:

  • 您需要针对您的特定用例微调正则表达式及其相关捕获。根据您预期的匹配和检查,使其更贪婪或更严格。我只使用给出的一个通用示例。

  • 变量vartest 需要在您最后一次使用后立即分配给null。它是不可序列化的,因此如果它在最后一次使用后仍然存在,将导致 Jenkins 流水线中的错误。例如:

    var = filename =~ /-([A-Z]+)\.ext/
    print "Using ${var} for the first time."
    print "Using ${var} for the last time."
    var = null
    
  • 对于声明式语法管道,这些代码示例需要嵌套在script {} 块中。

【讨论】:

  • 您对自己的解释再好不过了。谢谢!
猜你喜欢
  • 2017-07-12
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 2022-11-18
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多