如何使用AQL找到损坏的工件并删除它们?
您可能已经损坏了缓存到Artifactory中的工件(例如,由于DNS错误导致的具有错误内容的工件)。默认情况下,Artifactory通过拒绝具有错误坐标(路径)的pom来保持存储库健康。如果POM内部的groupId:artifactId:version信息与部署路径不匹配,Artifactory将拒绝部署,并返回“409 Conflict”错误。属性可以禁用此行为禁止POM一致性复选框。
下面是一个示例AQL (Artifactory Query Language)查询以帮助识别可能已损坏的文件。
物品。找到({”或“美元:[{”和“美元:[{“类型”:“文件”},{“大小”:{" $ lte ": " 1364 "}},{“回购”:“远程缓存”},{"名称":{" $ ne”:“maven-metadata.xml”}},{"名称":{" $ nmatch”:“*。pom“}},{"名称":{" $ nmatch”:“*。asc "}} ] }, { "$ 和“:[{“类型”:“文件”},{“大小”:“0”},{“回购”:“远程缓存 "} ] }, { "$ 和“:[{“类型”:“文件”},{“archive.entry.name”:{" $ eq”:零}},{"名称":{" $匹配":" * . jar "}},{“回购”:“远程缓存 "} ] } ] } ) . 排序({" $ desc ":["名称"]})
上面的AQL示例将搜索在中的任何文件远程缓存(“远程”存储库的缓存),满足以下任何条件
- 文件大小小于等于1364字节的文件(maven-metadata.xml、*. xml除外)。pom, * .asc
- 文件大小为0的文件
- *.jar(存档)文件包含null
您可以将上面的JSON文件保存为一个文件(例如cleanaql),然后将其用于下面的命令
curl - l ? ?-X POST -H"Content-type:text/plain" -uadmin:password——data-binary @cleanaql??https://my-artifactory/artifactory/api/search/aql > aql-result.json
在检查输出(aql-result.json)之后,您可以使用以下内容groovy脚本删除上面AQL找到的工件。
import groovy.json.JsonSlurper import org.jfrog.artifactory.client.Artifactory import org.jfrog.artifactory.client.Artifactory client /** *由eli@jfrog于2016年3月3日创建。*/ class DeleteFiles {final static字符串ARTIFACTORY_URL = 'https://my_artifactory/artifactory' static字符串adminUser = '*' static字符串adminPassword = '*' static Artifactory artifactoryClient = artifactoryClient。create(ARTIFACTORY_URL, adminUser, adminPassword) public static void main(String[] args) {def json = new JsonSlurper()。json.results. parse(new File('/PATH-TO-FILE/aql-result.json'))每个{it-> String path = "${it.path}/${it.name}" println "删除路径$path" artifactoryClient.repositories().repository("remote-cache").delete(path)}}}