获取Jenkinsfile中的文件名

时间:2018-06-13 10:38:45

标签: bash jenkins jenkins-pipeline

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

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

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

1 个答案:

答案 0 :(得分: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/

并且test会存储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 {}块中。