Azure JFrog集成YAML管道 如何限制AQL仅返回最新1个文件
问题根因
直接在JSON结构的大括号、方括号后追加limit(1)不生效,是因为ArtifactoryGenericDownload@3任务使用的File Spec规范不支持直接拼接原生AQL的函数式语法,limit、排序这类控制参数必须放在JSON结构的指定层级;且如果要取最近更新的文件,必须先配置按修改时间倒序,否则limit返回的结果不是目标文件。
可直接使用的修正后配置
ArtifactoryGenericDownload@3 inputs: connection: "JFROG" specSource: "taskConfiguration" fileSpec: | { "files": [ { "target": "./$(Pipeline.Workspace)/de-cf-dnalib", "aql": { "items.find":{ "repo":"python", "$and":[ { "$and": [ { "name": { "$match": "*.whl" } }, { "modified": { "$last": "10d" } } ] }, { "$and": [ { "name": { "$nmatch": "*dev*" } } ] } ] }, "sort": { "$desc": ["modified"] }, "limit": 1 } } ] } failNoOp: true
配置注意事项
sort和limit字段必须和items.find平级,放在aql对象下,不能写到items.find的查询条件对象内部,否则会被识别为制品属性匹配规则,无法起到分页排序的作用sort配置通过$desc: ["modified"]指定按制品修改时间倒序排列,保证排序后的第一条结果就是最近更新的符合筛选规则的文件limit: 1会告诉Artifactory只返回排序后的1条结果,匹配你的下载需求- 原有所有筛选规则(python仓库、近10天更新、.whl后缀、文件名不含dev关键字)全部保留,没有改动
内容的提问来源于stack exchange,提问作者Patryk Wilk
相关产品推荐
相关产品推荐

