web-dev-qa-db-de.com

Sonatype Nexus 3 - Holen Sie sich den neuesten Schnappschuss

Wir haben gerade die Nexus-Installation auf die neueste Version (3.x) aktualisiert. Gibt es eine Möglichkeit, die neueste Version eines bestimmten Snapshot-Artefakts abzurufen? Nexus 2 hatte eine Nice API, die nicht mehr unterstützt wird.

Dieselbe Frage (aber für die alte Version) wurde hier beantwortet: Sonatype Nexus REST Api fetch latest build version

Alle Ideen werden sehr geschätzt.

Am besten, Daniel

11
Daniel

Nexus 2 hatte eine Nice API, die nicht mehr unterstützt wird.

Es hört sich so an, als würden Sie sich auf Folgendes beziehen:

/service/local/artifact/maven/content
/service/local/artifact/maven/redirect

Wenn Sie nach der neuesten x.y.z-SNAPSHOT-Version suchen, bei der x, y, z vermutet werden - Nexus hatte diese Funktionalität nie (sie funktionierte nur für Plugins).

Dies ist einfach nicht wahr - siehe folgenden Artikel, in dem deutlich wird, dass Sie die Basisversionen LATEST, RELEASE oder SNAPSHOT angeben können.

https://support.sonatype.com/hc/en-us/articles/213465488-How-can-I-rieve-a-snapshot-if-I-don-know-the-exact-filename-

Es ist möglich, aber nicht in einem 1-Liner.

Ja - es sei denn, Sie haben ein Werkzeug zur Hand, wie z. B. Artefakt-Auflöser , das einen einzeiligen Befehl zum Abrufen eines Artefakts verwendet.

4
Peter Lynch

Was für ein Witz bezüglich: Nexus 3 ohne REST API.

Ich habe einen Hack gefunden, der mein Problem lindert. Es stellt sich heraus, dass ansible ein Nice maven_artifact - Modul hat, das irgendwie in der Lage ist, den neuesten Schnappschuss zu finden. Und Sie können vor Ort ansible laufen. So sieht es am Ende aus:

ansible all -i localhost, -c local -m maven_artifact -a "repository_url=https://my-nexus/repository/maven-snapshots/ group_id=com.whatever artifact_id=my-artifact version=2.0-SNAPSHOT dest=./my-artifact.jar"
2
Kevin Pauli

vor kurzem hatten wir das gleiche problem mit nexus version 3.12.1-01, daher gibt es definitiv keine rest api, um den neuesten snapshot direkt zu bekommen

wir konnten das problem mit python one liner lösen

JSON_RESPONSE=$(curl -u un:pw -X GET "http://nexus-Host/nexus/service/rest/beta/search/assets?maven.groupId=sample.group.id&maven.artifactId=sample&maven.extension=jar" -H  "accept: application/json")

echo $JSON_RESPONSE | python -c 'import sys, json; lines = json.load(sys.stdin)["items"]; sortedlines = sorted(lines, key=lambda k: k["downloadUrl"], reverse=True); print(sortedlines[0]["downloadUrl"])'

ich hoffe es hilft

1
didlich

Wenn Sie nach x.y.z-SNAPSHOT fragen, wird standardmäßig die neueste x.y.z-timestamp-Snapshot-Version heruntergeladen. Keine Notwendigkeit, etwas zusätzlich zu tun

Wenn Sie nach der neuesten x.y.z-SNAPSHOT-Version fragen, bei der die x, y, z erraten werden - Nexus hatte diese Funktionalität nie (sie funktionierte nur für Plugins). Und ich glaube nicht, dass es dafür einen guten Anwendungsfall gibt. Wenn dies erforderlich ist, machen Sie wahrscheinlich etwas falsch. Sie sollten immer mit einer bestimmten Version arbeiten. Eigentlich kann ich mir selbst für die 1. Funktionalität keine guten Use Cases vorstellen.

Ab April 2019 gibt es in Sonatype Nexus 3 IS a REST API für den Zugriff auf das neueste Artefakt

Dokumentation ist hier

http://community.sonatype.com/t/nxrm-3-16-rest-search-and-filtering-enhances/1586

Diesen Endpunkt verwenden /service/rest/v1/search/assets/download mit repository, group und name Argumenten. Wenn Sie nach version sortieren, erhalten Sie den neuesten Zeitstempel-Schnappschuss.

https://nexus.blahblah.com/service/rest/v1/search/assets/download?repository=maven-snapshots&group=com.my.company&name=myArtefact&sort=version&direction=desc

0
user1717259

Sie können mit locken herunterladen

curl -L --header 'Accept: application/json' "https://${NEXUS_URL}/service/rest/beta/search/assets/download?repository=${NEXUS_REPO_NAME}&maven.groupId=${MVN_GROUP_ID}&maven.artifactId=${MVN_ARTIFACT_ID}&maven.baseVersion=${APP_VERSION}&maven.extension=${MVN_EXTENSION}"
0
Martin Hatas

Es ist möglich, aber nicht in einem 1-Liner. Sie müssen die Datei maven-metadata.xml für jedes Snapshot-Artefakt abrufen, nach dem Sie suchen (beachten Sie, dass Projekte mit mehreren Modulen unterschiedliche Zeitstempel für jedes Modul haben, einschließlich des übergeordneten Moduls).

Wir verwenden xlstproc , um die relevanten Variablen zu extrahieren, so dass wir weiterhin von der Kommandozeile aus ohne schwere Werkzeuge wie maven oder ivy die Auflösung ausführen können.

0
Jon Freedman

Bash einzeilig mit curl, jq, sort und tail:

NEXUS_URL=https://your-nexus.com
MAVEN_REPO=maven-snapshots
GROUP_ID=...
ARTIFACT_ID=...
VERSION=2.0.1-SNAPSHOT
FILE_EXTENSION=jar

download_url=$(curl -X GET "${NEXUS_URL}/service/rest/v1/search/assets?repository=${MAVEN_REPO}&maven.groupId=${GROUP_ID}&maven.artifactId=${ARTIFACT_ID}&maven.baseVersion=${VERSION}&maven.extension=${FILE_EXTENSION}" -H  "accept: application/json"  | jq -rc '.items | .[].downloadUrl' | sort | tail -n 1)

wget $download_url
0
barth

Ich habe ein tolles Skript zusammengestellt, das auf Nexus hochgeladen werden kann und das dieses spezielle Problem mit einer POST -Anforderung löst.

Sie finden das Skript und einige Verwendungsanweisungen hier: https://github.com/rbjorklin/resolve-latest-nexus-artifact

0
rbjorklin