OSS Nexus 3 - link 到最新发布神器

OSS Nexus 3 - link to the latest release artifact

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

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

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

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

编写一些脚本

目前 Nexus 3 不提供 Nexus 2 中的 "latest" 功能。它只提供简单的 REST API.

我使用 Python 脚本完成了此操作。您要查询的 URL(s) 如下所示:

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

从下载中提取工件版本URL,将其和版本保存到 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 没有 "latest" 功能...

编辑

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