Artifactory:以非递归方式下载最新发布版本的所有根文件

Artifactory:以非递归方式下载最新发布版本的所有根文件,artifactory,Artifactory,我想从artifactory检索遵循以下模式的文件: "my-artifactory-repo/project-name/branch-name/1234/*" 其中,1234是最新发布版本的版本号,其中,*应不递归到文件夹中,但只匹配即时文件。我使用buildpublish以构建名称“project name.branch name”发布每个构建 我已经编写了一个filespec,它指定了一个“build”,而不是一个build编号,从而使Artifactory自动选择最

我想从artifactory检索遵循以下模式的文件:

"my-artifactory-repo/project-name/branch-name/1234/*"
其中,
1234
是最新发布版本的版本号,其中,
*
递归到文件夹中,但只匹配即时文件。我使用
buildpublish
以构建名称“project name.branch name”发布每个构建

我已经编写了一个filespec,它指定了一个“build”,而不是一个build编号,从而使Artifactory自动选择最新发布的build。如果我将模式简化为
我的artifactoryrepo/project name/branch name/*
,这将导致下载最新版本的所有工件,那么这就很好了

然而,我遇到的麻烦是要求只下载即时文件,而不是递归到文件夹中。所以我尝试使用正则表达式,如下所示

{
    "files": 
    [
        {
            "pattern": "my-artifactory-repo/project-name/branch-name/(\\d+/[^/]+)",
            "build": "project-name.branch-name",
            "recursive": "false",
            "regexp": "true","
            "target": "./artifactory-tmp/"
        }
    ]
}
但是,每次我尝试使用正则表达式时,结果都是零。

其他一些我尝试过但不起作用的事情:

  • 不包含带括号的正则表达式

  • 使用一个更简单的正则表达式,比如
    …/build.bat
    (因为目前我有4位数的内部版本号,并且我知道那里有一个build.bat文件),带或不带括号

  • 不使用正则表达式,而是使用模式
    my artifactory repo/project name/branch name/*/*
    。但这会导致递归,尽管存在“递归”:“false”

  • 使用这个搜索命令首先检索可用的内部版本号,这样我就可以提取最后一个版本号并将其插入到filespec中。但是,无法判断最新生成文件夹是否已完成并已发布,或者当前仍在上载

    jfrog search --recursive=false --include-dirs=true "my-artifactory-repo/project-name/branch-name/"
    
只有upload命令支持“regexp”选项,而下载命令不支持。我相信jfrogcli文档下的文件规范模式显示了这一点。忽略文件规范中包含但不受支持的选项。这也许是需要改进的地方

当下载文件时将“recursive”选项设置为“false”时,该命令确实避免了递归目录搜索。但是,包含多个通配符和非递归搜索的模式会导致搜索深度的模糊性。请注意,单个通配符可以包含多个目录。当模式包含一个通配符时,很容易理解递归的含义,但如果有多个通配符,则递归实际上是未定义的


看看你是否能让你的模式更具体,这样它就能准确地捕捉到你需要的东西。如果这是不可能的,考虑把你的模式分成多个模式。所有模式仍然可以包含在同一个文件规范中,因为规范中的“文件”是一个列表,可以包含多个模式和目标对。

谢谢,regexp选项的不对称性只适用于上传,这让我措手不及。我现在改变了我的方法。我之所以以这种方式来解决这个问题,是因为我需要迁移大量的Jenkins“归档工件”和“复制工件”步骤来使用Artifactory。我宁愿尽可能地坚持那些原始模式,以避免引入新问题。重新考虑每个模式以适应Artifactory将非常耗时。