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