1

私はジェンキンスでアーティファクトを構築し、すべての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 を使用していくつかのスクリプトを作成する必要があるかどうか、またはシェル 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

応答では、ダウンロード URL、その他の属性、および継続トークンを含むアーティファクトの 5 つのランダムなエントリを受け取ります。したがって、継続トークンを使用してすべてのアーティファクトを (継続トークンが存在する間) 反復処理できます。

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 をリリースした理由がよくわかりません。

編集

このスクリプトは Nexus 3.3.x 用に作成したため、3.6 では REST 呼び出しから返される URL または属性が少し異なる場合があります。

于 2017-12-30T11:32:55.570 に答える