web-dev-qa-db-fra.com

Sonatype Nexus 3 - obtenir le dernier instantané

Nous venons de mettre à niveau l’installation de Nexus vers la dernière version (3.x). Existe-t-il un moyen d'obtenir la dernière version d'un artefact d'instantané donné? Nexus 2 avait une API Nice qui n'est plus supportée.

La même question (mais pour l'ancienne version) a été posée ici: Sonatype Nexus REST Api va chercher la dernière version de build

Toutes les idées sont très appréciées.

Meilleur, Daniel

11
Daniel

Nexus 2 avait une API Nice qui n'est plus supportée.

On dirait que vous faites référence à ceux-ci:

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

Si vous demandez la dernière version de x.y.z-SNAPSHOT dans laquelle on devine les x, y et z, Nexus n’a jamais eu cette fonctionnalité (elle ne fonctionnait que pour les plugins).

Ceci est tout simplement faux - voir l'article suivant qui montre clairement que vous pouvez spécifier les versions de base LATEST, RELEASE ou SNAPSHOT.

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

C'est possible mais pas dans un 1-liner.

Oui - sauf si vous avez un outil pratique tel que artifact-resolver qui utilise une commande d'une ligne pour récupérer un artefact.

4
Peter Lynch

Quelle blague: Nexus 3 n'ayant pas d'API REST.

J'ai trouvé un hack qui allège mon problème. Il s'avère que ansible a un module Nice maven_artifact qui est en quelque sorte capable de comprendre le dernier instantané. Et vous pouvez exécuter ansible localement. Donc ça finit par ressembler à ça:

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

récemment, nous avons rencontré le même problème avec Nexus version 3.12.1-01, il n’ya donc certainement pas de repos api pour obtenir le dernier instantané directement

nous avons pu résoudre le problème en utilisant une doublure en python

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"])'

j'espère que ça aide

1
didlich

Si vous demandez x.y.z-SNAPSHOT, la dernière version de l'instantané x.y.z-timestamp sera téléchargée par défaut. Pas besoin de faire quelque chose de plus

Si vous demandez de trouver la dernière version de x.y.z-SNAPSHOT dans laquelle on devine x, y, z - Nexus n’a jamais eu cette fonctionnalité (elle ne fonctionnait que pour les plugins). Et je ne pense pas qu'il y ait un bon cas d'utilisation pour cela. Si cela est nécessaire, vous faites probablement quelque chose de mal. Vous devriez toujours travailler avec une version spécifique. En fait, même pour la 1ère fonctionnalité, je ne peux pas penser à de bons cas d'utilisation.

1

Vous pouvez télécharger avec curl

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

C'est possible mais pas dans un 1-liner. Vous devez récupérer le fichier maven-metadata.xml pour chaque artefact d'instantané recherché (notez que les projets multi-modules ont des horodatages différents pour chaque module, y compris le parent).

Nous utilisons xlstproc pour extraire les variables pertinentes afin que nous puissions toujours exécuter à partir de la ligne de commande sans outils lourds tels que maven ou ivy pour effectuer la résolution.

0
Jon Freedman

J'ai mis au point un script qui peut être téléchargé sur Nexus et qui résout ce problème avec une requête POST.

Vous pouvez trouver le script et des instructions d'utilisation ici: https://github.com/rbjorklin/resolve-latest-nexus-artifact

0
rbjorklin