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
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.
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.
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"
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
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.
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}"
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.
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
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