Jenkinsh(shell)步骤中的全局模式
我正在尝试设置一个Jenkins文件来运行我们的CI管道。其中一个步骤将涉及从整个目录树中收集文件,并将其复制到单个目录中,以便进行压缩 我试图使用JenkinsJenkinsh(shell)步骤中的全局模式,jenkins,jenkins-pipeline,glob,Jenkins,Jenkins Pipeline,Glob,我正在尝试设置一个Jenkins文件来运行我们的CI管道。其中一个步骤将涉及从整个目录树中收集文件,并将其复制到单个目录中,以便进行压缩 我试图使用Jenkinssh步骤和glob模式来实现这一点,但我似乎无法实现这一点 一个简单的例子是: pipeline { agent any stages { stage('List with Glob'){ steps{ sh 'ls **/*.xml'
sh
步骤和glob模式来实现这一点,但我似乎无法实现这一点
一个简单的例子是:
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管道中运行)
非常感谢任何帮助 据我所知,
***.xml'
不是有效的全局模式()。相反,这里有一个ant,据我所知,它不受bash(或sh)支持。相反,你不想做的是:
可能使用的shell与您预期的不同,我相信默认情况下,
sh
中的所有内容都是由bourne shell(而不是bash
)执行的。我认为您是对的。我使用了zsh
,它似乎支持开箱即用,而下面的答案告诉我这不是一个有效的glob模式。谢谢,谢谢你。正如我的问题下面的评论所说,我一直在使用zsh
,但没有意识到它支持globstar进行开箱即用的递归匹配。你的答案很好,我使用了查找
,然后使用-exec
将文件复制到需要的位置。
pipeline {
agent any
stages {
stage('List with find'){
steps{
sh "find . -type f -name '*.xml'"
}
}
}
}