Jenkinsfile sh(shell)中的Glob模式步骤

时间:2017-12-01 17:33:08

标签: jenkins jenkins-pipeline glob

我正在尝试设置Jenkins文件来运行我们的CI管道。其中一个步骤将涉及从我们的目录树中收集文件并将它们复制到一个目录中,以便进行压缩。

我正在尝试使用Jenkins sh步骤并使用glob模式执行此操作,但我似乎无法使其工作。

一个简单的例子Jenkinsfile将是:

pipeline {
    agent any
    stages {
        stage('List with Glob'){
            steps{
                sh 'ls **/*.xml'
            }
        }
    }
}

我希望期望列出工作区中的任何.xml文件,而是收到:

[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (List with Glob)
[Pipeline] sh
[jenkinsfile-pipeline] Running shell script
+ ls '**/*.xml'
ls: cannot access **/*.xml: No such file or directory
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 2
Finished: FAILURE

我认为我缺少Groovy字符串插值的东西,但我需要一些帮助来解决这个特殊情况(通过Jenkins文件在Jenkins管道中运行)

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

据我所知,**/*.xml'不是有效的glob模式(see this)。相反,你有一个蚂蚁naming pattern,据我所知,它不受bash(或sh)的支持。相反,你不想做的是use find

pipeline {
    agent any
    stages {
        stage('List with find'){
            steps{
                sh "find . -type f -name '*.xml'"
            }
        }
    }
}