我有一个Groovy库,该库在目录中获取文件并将其上传到远程主机。 要上传的工件的位置会动态更改。所以我试图找到基于正则表达式的文件。这是代码段。
def file = findFiles (glob: '$WORKPLACE/**/*-${BUILD_NUMBER}-*/${file_name}.zip')
但是,file参数返回一个空列表。即使当我看到要上传的特定文件在目录中。 有没有办法找到文件的路径并在函数中使用它?
EDIT1
我什至用简单的findFiles
代替了ls
。我看到了No such file or directory
的错误。但是,当我使用相同的正则表达式执行相同的ls
时,我确实看到了文件系统上的文件。该文件是在管道中的先前步骤中创建的。为什么以后的步骤找不到文件?
def file = sh (script: "ls '$WORKPLACE/**/*-${BUILD_NUMBER}-*/${file_name}.zip'", returnStdout: true).trim()
注意:该文件的权限为644,由Jenkins用户拥有。
EDIT2
出于某种原因,这可行。这将精确地找到文件。为什么会这样?:
sh '''
ls $WORKPLACE/**/*-${BUILD_NUMBER}-*/${file_name}.zip
'''
EDIT3
我将正则表达式从findFiles
中移出,以防变量未正确替换。
def file_path = "$WORKPLACE/**/*-${BUILD_NUMBER}-*/${file_name}.zip"
def file = findFiles (glob: file_path)
我现在收到以下错误:
java.io.IOException: Expecting Ant GLOB pattern, but saw '/app/jenkins/workspace/job/**/*-21-*/file.zip'
以上似乎是蚂蚁图案。我想念什么吗?
答案 0 :(得分:0)
我发现了问题。 findFiles
可以使用的路径是相对的。当前目录为工作空间目录。
def file_path = "*/*-${BUILD_NUMBER}-*/${file_name}.zip"
def file = findFiles (glob: file_path)