使用JFrog CLI下载Artifactory指定属性文件夹内容失败
问题根源
你的AQL仅筛选了type: folder类型的条目,也就是只匹配到build03文件夹本身,并未包含其下的文件。虽然添加了recursive: true参数,但该参数是对AQL返回结果的递归处理——而AQL仅返回了文件夹,递归文件夹本身不会自动抓取内部文件。
解决办法
方法一:修改AQL关联父文件夹属性,直接匹配目标文件
由于release_ready属性挂载在build03文件夹上,文件本身无此属性,需用AQL的$join语法关联文件与其父文件夹的属性,筛选出属于release_ready=true文件夹下的所有文件:
修改后的file spec:
{ "files": [ { "aql": { "items.find": { "repo": "product-repo", "path": {"$match": "releases/ProductY/*/*"}, "type": "file" }, "join": { "items.find": { "repo": "product-repo", "path": {"$match": "releases/ProductY/*"}, "type": "folder", "@release_ready": {"$eq": "true"} }, "on": { "$and": [ {"items.repo": "$repo"}, {"items.path": {"$match": "$path/*"}} ] } } }, "target": "some/folder/on/my/disk/{repo}/{path}/{name}" } ] }
该配置通过$join将文件与父文件夹关联,确保仅下载release_ready=true的build文件夹下的所有文件,target中的变量会保留原目录结构。
方法二:先获取目标文件夹路径,再直接下载路径下全部内容
这种方式更简洁,分两步操作:
- 先用AQL搜索得到build03的完整路径:
jfrog rt s --spec myfilespec.json --format json | jq -r '.[0].path'
(若无jq工具,可直接查看搜索结果中的path字段)
2. 通过路径匹配下载该路径下所有内容,可直接用命令:
jfrog rt dl "product-repo/releases/ProductY/build03/**" "some/folder/on/my/disk/" --recursive=true
或使用对应的file spec:
{ "files": [ { "pattern": "product-repo/releases/ProductY/build03/**", "target": "some/folder/on/my/disk/", "recursive": true } ] }
注:日志中出现的procduct-repo、repeases/ProgramY应为拼写笔误,实际spec路径正确即可忽略。
内容的提问来源于stack exchange,提问作者Hunter2
相关产品推荐
相关产品推荐

