1

我正在通过 jenkins 构建工件,并在每次 git 提交时通过 nexusArtifactUploader 将它们上传到 OSS Nexus 3.6 中的 maven2 存储库。在标记提交时,它作为版本上传,带有 git 标签中提到的版本;未标记的提交作为最后一个 git 标签版本的快照发布。

每个人都拥有对该存储库的 RO 访问权限,因此我无需指定任何凭据即可下载工件。

在部署阶段,我正在通过诸如 nexus_url/repository/my-repo-releases/com/example/somthing/my_artifact/1.0.15/my_artifact-1.0.15.jar 之类的链接下载工件。但我想通过像nexus_url/repository/my-repo-releases/com/example/something/my_artifact/latest这样的链接下载最新版本(我不想指定版本号,我只想拥有最新版本)。

你能告诉我该怎么做吗?它看起来像是每个存储库的基本操作。我不确定是否应该使用 nexus API 或 shell I 编写一些脚本?

4

1 回答 1

0

目前,Nexus 3 不提供您从 Nexus 2 中了解到的“最新”功能。它只提供了一个简单的 REST API。

我用 Python 脚本做到了这一点。您必须查询的 URL 如下所示:

request_url = nexus_url + "/service/siesta/rest/v1/assets?repositoryId=" + repository_id

在响应中,您将收到 5 个随机条目,其中包含下载 URL、其他属性和延续令牌。因此,您可以使用延续令牌遍历所有工件(当您存在延续令牌时)。

request_url = nexus_url + "/service/siesta/rest/v1/assets?continuationToken=" + response["continuationToken"] + "&repositoryId=" + repository_id

从 downloadURL 中提取 artifact-version,将其和版本保存到 OrderedDictionary,获取最高的工件编号(最大值)并使用其下载 URL:

od = collections.OrderedDict(sorted(all_download_urls.items()))
download_key = max(od)

if bool(max(od)):
    download_url = od.get(download_key)

    print "Downloading this version: "
    print download_key
    print "---------------------------"
    print "Using this download url"
    print download_url
    os.system("wget %s --user=%s --password=%s" % (download_url, user, password))
else:
    print "Not found."

老实说,我真的不知道为什么 Sonatype 发布的 Nexus3 没有“最新”功能......

编辑

我为 Nexus 3.3.x 编写了这个脚本,所以在 3.6 上,从 REST 调用返回的 URL 或属性可能会有所不同。

于 2017-12-30T11:32:55.570 回答