Sonatype Nexus 搜索 api 没有 return 所有工件
Sonatype Nexus search api does not return all the artifacts
我们使用 sonatype nexus OSS 3.14.0-04 来存储我们所有的工件,我们使用 Jenkins 作为我们的 CI/CD。我最近介绍了快照支持。从詹金斯我使用下面的 groovy 脚本来获取所有工件版本并填充一个活动选择下拉列表:
#!/usr/bin/env groovy
import groovy.json.JsonSlurper
def source = "release"
def url = "http://<<nexus-host>>/service/rest/v1/search?repository=maven-releases&maven.groupId=com.xyz&maven.artifactId=woof&maven.extension=war"
Set<String> versions = new HashSet<>();
def continuationToken = null
def count = 0
def url1 = url
while (true) {
def xml = url1.toURL().text
JsonSlurper parser = new groovy.json.JsonSlurper()
Map parsedJson = parser.parseText(xml)
def rawVer = parsedJson.items.version
continuationToken = parsedJson.continuationToken
if (continuationToken != null) {
url1 = url + "&continuationToken=" + continuationToken
}
if (source.equalsIgnoreCase('snapshot')) {
Set<String> modVersion = new HashSet<>()
for (def item : rawVer) {
modVersion.add(item.split("-").getAt(0) + "-SNAPSHOT")
}
versions.addAll(modVersion)
} else {
versions.addAll(rawVer)
}
if (continuationToken == null || count > 5) {
break;
}
}
return versions.sort().reverse()
nexus api 搜索端点使用分页策略 return 结果。如果全局结果包含多个页面,则当前结果将包含一个 continuationToken
,您可以在下一个查询中使用它来获取下一个结果页面。
如果您的搜索结果 return 多于页面大小,您将需要多次调用搜索 url 以在 Jenkins 脚本中获取所有结果(即直到 continuationToken
为空)。
参考:Nexus Search API endpoint doc(也在您的 swagger-ui api 您的 nexus 管理员视图中引用)
我们使用 sonatype nexus OSS 3.14.0-04 来存储我们所有的工件,我们使用 Jenkins 作为我们的 CI/CD。我最近介绍了快照支持。从詹金斯我使用下面的 groovy 脚本来获取所有工件版本并填充一个活动选择下拉列表:
#!/usr/bin/env groovy
import groovy.json.JsonSlurper
def source = "release"
def url = "http://<<nexus-host>>/service/rest/v1/search?repository=maven-releases&maven.groupId=com.xyz&maven.artifactId=woof&maven.extension=war"
Set<String> versions = new HashSet<>();
def continuationToken = null
def count = 0
def url1 = url
while (true) {
def xml = url1.toURL().text
JsonSlurper parser = new groovy.json.JsonSlurper()
Map parsedJson = parser.parseText(xml)
def rawVer = parsedJson.items.version
continuationToken = parsedJson.continuationToken
if (continuationToken != null) {
url1 = url + "&continuationToken=" + continuationToken
}
if (source.equalsIgnoreCase('snapshot')) {
Set<String> modVersion = new HashSet<>()
for (def item : rawVer) {
modVersion.add(item.split("-").getAt(0) + "-SNAPSHOT")
}
versions.addAll(modVersion)
} else {
versions.addAll(rawVer)
}
if (continuationToken == null || count > 5) {
break;
}
}
return versions.sort().reverse()
nexus api 搜索端点使用分页策略 return 结果。如果全局结果包含多个页面,则当前结果将包含一个 continuationToken
,您可以在下一个查询中使用它来获取下一个结果页面。
如果您的搜索结果 return 多于页面大小,您将需要多次调用搜索 url 以在 Jenkins 脚本中获取所有结果(即直到 continuationToken
为空)。
参考:Nexus Search API endpoint doc(也在您的 swagger-ui api 您的 nexus 管理员视图中引用)