我知道工件使用基于校验和的存储,并且即使我以不同的名称上传多个相同的工件,也只会存储工件的一个副本。
由于我有许多项目使用版本匿名但可能相同的 jar,我想知道是否有任何方法可以让工件告诉我在多个 id 下引用了哪些工件。
我知道工件使用基于校验和的存储,并且即使我以不同的名称上传多个相同的工件,也只会存储工件的一个副本。
由于我有许多项目使用版本匿名但可能相同的 jar,我想知道是否有任何方法可以让工件告诉我在多个 id 下引用了哪些工件。
虽然 Artifactory 没有提供此信息的现有功能,但使用 Artifactory 的REST-API的小脚本实际上很容易实现。
例如,您可以编写一个树遍历器(使用文件夹信息资源),将校验和映射到文件(文件校验和可以使用文件信息资源获得)。
或者,如果您使用 Artifactory 的 Pro 版本,您可以使用File List 资源检索存储库中所有工件的列表
这是针对 PostGreSQL 数据库运行的 SQL。我还没有尝试使用任何其他数据库。
select sha1_actual, node_name, node_path, repo, *
from nodes
where sha1_actual in
(
select sha1_actual
from nodes
where node_type != 0
group by sha1_actual
having count(1) > 1
)
order by sha1_actual
#!/bin/bash
#
# search in artifactory, lists duplicates angelos@unix.gr
#
search=$1
if [ "X$search" == "X" ]
then
echo "$0 <search item>"
exit 1
else
search=`echo $search |sed -e 's/ /\%20/gi' `
search="*${search}*"
fi
USER=`whoami`
PASS=${PASS:-somepass}
CREDS=${USER}:${PASS}
ARTIFACTORY=https://artifactory.somesite.com/artifactory
curl -s -u ${CREDS} -o search.txt ${ARTIFACTORY}/api/search/artifact\?name=${search}
echo "List of all uris is in search.txt"
echo "All instances of $search follow"
echo "---------------------------------"
grep $search search.txt | grep -v pom | awk '{ print $3}' | xargs -i basename {} | sort | uniq -c | sort -rn