在单个命令中比较 Jenkins 管道中的 2 个参数

Comparing 2 parameters in Jenkins pipeline in a single command

下面的代码有什么问题,比较 groovy

中的 2 个字符串

我正在尝试在一行中比较两个参数以使其看起来更整洁

if (params.dirname == ((params.path =~ ~/${params.dirname}/).with { matches() ? it[0] : null })) {
    print success 
} 

抛出异常 -

    java.lang.NoSuchMethodError: No such DSL method 'matches' found among steps 

没有必要使您的用例过于复杂。根据:

params.dirname = hde, params.path = /usr/tmp/jenkins/hde/filename.txt or /usr/hde/jenkins/ing/filename.txt or any random path which has hde in it

您正在尝试查找给定字符串 a 是否包含子字符串 b。可以使用 Java 的方法 String.contains(String substring) 来完成。或者,您可以为此使用正则表达式,但 String.contains() 看起来更容易理解您的意图。考虑以下 Groovy 脚本:

def params = [
        dirname: 'hde',
        path: '/usr/tmp/jenkins/hde/filename.txt'
]

// Using String.contains()
if (params.path.contains(params.dirname)) {
    println "Path '${params.path}' contains '${params.dirname}'"
}

// Using regular expression
if (params.path ==~ /(.*)${params.dirname}(.*)/) {
    println "Path '${params.path}' contains '${params.dirname}'"
}

当你 运行 时,两个 if 语句的计算结果为 true:

Path '/usr/tmp/jenkins/hde/filename.txt' contains 'hde'
Path '/usr/tmp/jenkins/hde/filename.txt' contains 'hde'