如何配置Artifactory输出md5sum等命令式校验和格式?
让Artifactory输出类校验命令格式的解决方案
我刚好碰过类似的需求,Artifactory默认确实只返回纯哈希值,不过有几个实用的办法能让它输出下游系统需要的哈希值 文件名格式:
1. 用REST API+脚本拼接(轻量无配置)
Artifactory的存储API能返回文件的哈希集合和文件名,你可以用简单的脚本把这俩拼起来,完全模拟md5sum这类命令的输出。
比如用bash+curl+jq的组合(需要提前安装jq工具):
# 替换成你的Artifactory实例地址、仓库名和文件路径 ARTIFACTORY_ADDR="http://your-artifactory-server/artifactory" TARGET_REPO="your-target-repo" FILE_LOC="packages/app-v1.0.tar.gz" # 拉取文件信息并拼接成md5sum格式 curl -s "$ARTIFACTORY_ADDR/api/storage/$TARGET_REPO/$FILE_LOC" | jq -r '.checksums.md5 + " " + .name'
运行后输出就是abcdef123456... app-v1.0.tar.gz,和md5sum命令的结果一模一样。同理,把.checksums.md5换成.sha1、.sha256就能生成对应格式的校验串。
2. 用Artifactory用户插件直接返回格式(无需下游处理)
如果下游系统没法做额外拼接,想让Artifactory直接返回目标格式,那可以写个简单的Groovy用户插件扩展它的API:
示例插件代码
创建checksum-formatter.groovy文件,放到Artifactory安装目录的etc/plugins文件夹里:
executions { getFormattedChecksums(httpMethod: 'GET') { params -> def repoName = params.repo def filePath = params.path def targetFile = repositories.getFile(repoName, filePath) if (!targetFile.exists()) { status = 404 message = "Requested file not found" return } def checks = [ md5: targetFile.getMd5(), sha1: targetFile.getSha1(), sha256: targetFile.getSha256(), sha512: targetFile.getSha512() ] def fileName = targetFile.getName() def outputContent = new StringBuilder() checks.each { algo, hash -> outputContent.append("${hash} ${fileName}\n") } status = 200 contentType = "text/plain" output = outputContent.toString().trim() } }
重启Artifactory或者通过API加载插件后,就可以用这个URL调用:GET /api/plugins/execute/getFormattedChecksums?params=repo=your-repo;path=packages/app-v1.0.tar.gz
返回的内容就是:
md5哈希值 app-v1.0.tar.gz sha1哈希值 app-v1.0.tar.gz sha256哈希值 app-v1.0.tar.gz sha512哈希值 app-v1.0.tar.gz
完全符合下游系统的解析要求。
3. 关于内置配置的说明
目前Artifactory没有内置的查询参数或者开关直接返回这种格式,所以上面两种是最靠谱的方案。如果能接受下游做简单处理,优先选第一种;如果必须让Artifactory直接输出,就用用户插件的方式。
内容的提问来源于stack exchange,提问作者LKJS
相关产品推荐
相关产品推荐

