如何使用 API 列出 Nexus 存储库中的所有组件?
How to list all component in Nexus repository with API?
我在名为 myrepo
的 Nexus 中使用 RAW
格式存储库。我上传 .tar.gz
、zip
、exe
等文件。在此存储库中,我有许多子文件夹和文件,现在我想列出所有带有 API
.
的文件
我使用这个由 Nexus 生成的执行 UI:
curl -X GET "http://localhost:8081/service/rest/v1/search?repository=myrepo&format=raw" -H "accept: application/json"
问题是结果不完整。结果大约有 1000 行 json,但结果中还缺少其他文件。
我也尝试过按名称过滤:
curl -X GET "http://localhost:8081/service/rest/v1/search?q=update&repository=myrepo&format=raw" -H "accept: application/json"
但相同 - 列表不完整。
我的问题是:
如何列出此 RAW 存储库中的所有组件?
我设法用 groovy
脚本做到了这一点
在脚本中,我获取令牌并像这样在循环中传递它:
import groovy.json.JsonSlurper
def nexusURL = "http://localhost:8081/service/rest/beta/search?repository=myrepo&format=raw"
// Make request to Nexus API and get continuationToken
def nexusAPIResponse = new URL(nexusURL).text;
def nexusAPISlurper = new JsonSlurper()
def nexusAPIResponseSlurper = nexusAPISlurper.parseText(nexusAPIResponse)
def continuationToken = nexusAPIResponseSlurper.continuationToken
println "continuationToken: "+continuationToken
println 'nexusAPIResponseSlurper: '+nexusAPIResponseSlurper.items.name.size()
println "--------------------------------"
try {
while(continuationToken != 'null'){
// Make request to Nexus API with continuationToken
def nexusAPIResponseWithToken = new URL("${nexusURL}&continuationToken=${continuationToken}").text;
def nexusAPISlurperWithToken = new JsonSlurper()
def nexusAPIResponseSlurperWithToken = nexusAPISlurperWithToken.parseText(nexusAPIResponseWithToken)
continuationToken = nexusAPIResponseSlurperWithToken.continuationToken
nexusAPIResponseSlurperWithToken.items.name.each {
println it
}
}
}
catch(IOException ex) {
println "--------------------------------"
}
使用集成分页
https://help.sonatype.com/repomanager3/rest-and-integration-api/pagination
您获取结果的第一页,然后检查 continuationToken
{
"items" : [
...
],
"continuationToken" : "88491cd1d185dd136f143f20c4e7d50c"
}
如果它不为空,只需添加即可获取更多信息:
&continuationToken=continuationToken
据您所知,Groovy 使用 JsonSlurper 是实现此目的的好方法
我在名为 myrepo
的 Nexus 中使用 RAW
格式存储库。我上传 .tar.gz
、zip
、exe
等文件。在此存储库中,我有许多子文件夹和文件,现在我想列出所有带有 API
.
我使用这个由 Nexus 生成的执行 UI:
curl -X GET "http://localhost:8081/service/rest/v1/search?repository=myrepo&format=raw" -H "accept: application/json"
问题是结果不完整。结果大约有 1000 行 json,但结果中还缺少其他文件。
我也尝试过按名称过滤:
curl -X GET "http://localhost:8081/service/rest/v1/search?q=update&repository=myrepo&format=raw" -H "accept: application/json"
但相同 - 列表不完整。
我的问题是:
如何列出此 RAW 存储库中的所有组件?
我设法用 groovy
脚本做到了这一点
在脚本中,我获取令牌并像这样在循环中传递它:
import groovy.json.JsonSlurper
def nexusURL = "http://localhost:8081/service/rest/beta/search?repository=myrepo&format=raw"
// Make request to Nexus API and get continuationToken
def nexusAPIResponse = new URL(nexusURL).text;
def nexusAPISlurper = new JsonSlurper()
def nexusAPIResponseSlurper = nexusAPISlurper.parseText(nexusAPIResponse)
def continuationToken = nexusAPIResponseSlurper.continuationToken
println "continuationToken: "+continuationToken
println 'nexusAPIResponseSlurper: '+nexusAPIResponseSlurper.items.name.size()
println "--------------------------------"
try {
while(continuationToken != 'null'){
// Make request to Nexus API with continuationToken
def nexusAPIResponseWithToken = new URL("${nexusURL}&continuationToken=${continuationToken}").text;
def nexusAPISlurperWithToken = new JsonSlurper()
def nexusAPIResponseSlurperWithToken = nexusAPISlurperWithToken.parseText(nexusAPIResponseWithToken)
continuationToken = nexusAPIResponseSlurperWithToken.continuationToken
nexusAPIResponseSlurperWithToken.items.name.each {
println it
}
}
}
catch(IOException ex) {
println "--------------------------------"
}
使用集成分页
https://help.sonatype.com/repomanager3/rest-and-integration-api/pagination
您获取结果的第一页,然后检查 continuationToken
{
"items" : [
...
],
"continuationToken" : "88491cd1d185dd136f143f20c4e7d50c"
}
如果它不为空,只需添加即可获取更多信息:
&continuationToken=continuationToken
据您所知,Groovy 使用 JsonSlurper 是实现此目的的好方法