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 调用返回的属性可能略有不同。
我正在通过 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 调用返回的属性可能略有不同。