我有以下步骤应该删除除foobar
以外的所有文件夹:
node {
stage('Clean') {
sh "rm -rf ${WORKSPACE}/path/to/folder/!\\(foobar\\)"
}
}
它将生成以下命令:
rm -rf '/path/to/workspace/path/to/folder/!(foobar)
它什么都不做。但是,如果我在终端(Jenkins外部)中键入命令,但路径周围没有简单的引号,则该命令有效。
为什么詹金斯生成简单的报价?如何删除它们以便命令起作用?
(我在OSX上运行Jenkins)
答案 0 :(得分:0)
除非您设置!(name)
,否则类型shopt -s extglob
不会起作用
在bash中。
请尝试:
bash -O extglob -c "rm -rf /path/to/workspace/path/to/folder/!(foobar)"
您也可以说:
find /path/to/workspace/path/to/folder -type d -mindepth 1 ! -name "foobar" -print0 | xargs -0 rm -rf
请记住提前备份文件夹,以免意外丢失文件。
答案 1 :(得分:0)
要删除工作空间(foobar
文件夹除外),您还可以使用cleanWs()插件中的Workspace Cleanup管道方法。
例如,像这样:
cleanWs deleteDirs: true, patterns: [[pattern: 'foobar', type: 'EXCLUDE']]
有关使用正确语法生成示例的信息,请参见http://<YOUR_JENKINS_ADDRESS>/<path_to_pipeline_job>/pipeline-syntax/
。
对于DSL作业,有wsCleanup()方法(具有excludePattern()
语法)。