105 votes

Télécharger les artefacts vers Nexus, sans Maven

J'ai un projet non-Java qui produit un artefact de construction versionné, et je veux le télécharger vers un dépôt Nexus. Comme le projet n'est pas Java, il n'utilise pas Maven pour les builds. Et je préfère ne pas introduire des fichiers Maven/POM juste pour mettre des fichiers dans Nexus.

Les liens sur les blogs vers l'API REST de Nexus aboutissent tous à un mur de connexion, sans lien "créer un utilisateur" à ma connaissance.

Alors, quel est le meilleur moyen (ou tout autre moyen raisonnable) de télécharger des artefacts de construction vers un dépôt Nexus sans Maven ? "bash + curl" serait génial, ou même un script en Python.

0 votes

Note, assurez-vous que vous avez un settings.xml dans ~/.m2 avec les serveurs et auth appropriés définis.

101voto

Mark O'Connor Points 33201

Avez-vous envisagé d'utiliser la ligne de commande Maven pour télécharger des fichiers ?

mvn deploy:deploy-file \
    -Durl=$REPO_URL \
    -DrepositoryId=$REPO_ID \
    -DgroupId=org.myorg \
    -DartifactId=myproj \
    -Dversion=1.2.3  \
    -Dpackaging=zip \
    -Dfile=myproj.zip

Cela générera automatiquement le POM Maven pour l'artefact.

Mise à jour

L'article suivant de Sonatype indique que le plugin maven "deploy-file" est la solution la plus simple, mais il fournit également quelques exemples utilisant curl :

https://support.sonatype.com/entries/22189106-How-can-I-programatically-upload-an-artifact-into-Nexus-

0 votes

Si seulement cela pouvait nous permettre de télécharger directement des fichiers à partir de ce zip, mais il semble que ce ne soit pas possible si vous le téléchargez comme cela.

0 votes

@sorin Il n'est pas possible de télécharger des fichiers à l'intérieur d'un zip en utilisant Maven. C'est une exigence inhabituelle et le seul gestionnaire de dépendances que je connais qui peut le faire est ivy (et ce n'est pas simple) ; voir l'exemple suivant : stackoverflow.com/questions/3445696/

0 votes

J'ai installé Nexus pour rendre tout cela plus simple, mais qu'est-ce que c'est que ça ? Que faire si j'ai un JAR fait maison sans connaître ses dépendances ? Mon IDE ne cesse de se plaindre de l'absence de *.pom. J'espérais que Nexus s'en occupe déjà pour moi, mais NOOOOO sh...

69voto

Ed Saito Points 1403

Utilisation du curl :

curl -v \
    -F "r=releases" \
    -F "g=com.acme.widgets" \
    -F "a=widget" \
    -F "v=0.1-1" \
    -F "p=tar.gz" \
    -F "file=@./widget-0.1-1.tar.gz" \
    -u myuser:mypassword \
    http://localhost:8081/nexus/service/local/artifact/maven/content

Vous pouvez voir ce que signifient les paramètres ici : https://support.sonatype.com/entries/22189106-How-can-I-programatically-upload-an-artifact-into-Nexus-

Pour que les autorisations fonctionnent, j'ai créé un nouveau rôle dans l'interface graphique de l'administrateur et j'ai ajouté deux privilèges à ce rôle : Téléchargement d'artefact et Téléchargement d'artefact. Le rôle standard "Repo : All Maven Repositories (Full Control)" n'est pas suffisant. Vous ne trouverez pas ces informations dans la documentation de l'API REST fournie avec le serveur Nexus, et ces paramètres pourraient donc changer à l'avenir.

Sur un problème Sonatype JIRA il a été mentionné qu'ils "vont remanier l'API REST (et la façon dont la documentation est générée) dans une prochaine version, très probablement plus tard cette année".

0 votes

Disons que nous publions à partir de Jenkins, et que nous autorisons seulement les utilisateurs de build à publier sur Nexus, comment gérez-vous le problème du mot de passe simple ? Est-ce que Jenkins a un plugin pour le téléchargement afin que nous puissions utiliser les informations d'identification de Jenkins ?

7voto

Praneel Points 1197

Il n'est pas nécessaire d'utiliser ces commandes vous pouvez utiliser directement l'interface web de nexus pour télécharger votre JAR en utilisant les paramètres GAV.

enter image description here

C'est donc très simple.

26 votes

Une interface graphique n'est pas utile ; je dois pouvoir télécharger via une ligne de commande script utilisée dans le cadre d'un processus de construction.

0 votes

Ça se traduit par une requête HTTP POST, vous ne trouvez pas ?

5 votes

@YngveSneenLindal Bien sûr, mais cela ne signifie pas que ces arguments POST constituent une API bien définie à utiliser publiquement.

6voto

Alex Miller Points 28225

Les appels que vous devez faire à Nexus sont des appels REST api.

Le maven-nexus-plugin est un plugin Maven que vous pouvez utiliser pour effectuer ces appels. Vous pouvez créer un pom factice avec les propriétés nécessaires et faire ces appels via le plugin Maven.

Quelque chose comme :

mvn -DserverAuthId=sonatype-nexus-staging -Dauto=true nexus:staging-close

Les choses supposées :

  1. Vous avez défini un serveur dans votre ~/.m2/settings.xml nommé sonatype-nexus-staging avec votre utilisateur et votre mot de passe sonatype - vous l'avez probablement déjà fait si vous déployez des snapshots. Mais vous pouvez trouver plus d'informations aquí .
  2. Votre fichier settings.xml local inclut les plugins nexus tels que spécifiés. aquí .
  3. Le fichier pom.xml qui se trouve dans votre répertoire actuel contient les coordonnées Maven correctes dans sa définition. Si ce n'est pas le cas, vous pouvez spécifier le groupId, l'artifactId et la version sur la ligne de commande.
  4. Le -Dauto=true désactivera les invites interactives afin que vous puissiez script ceci.

En fin de compte, tout ce que cela fait est de créer des appels REST dans Nexus. Il y a une api REST complète pour Nexus mais je n'ai pas eu beaucoup de chance de trouver de la documentation pour celle-ci qui ne soit pas derrière un paywall. Vous pouvez activer le mode de débogage pour le plugin ci-dessus et le comprendre en utilisant -Dnexus.verboseDebug=true -X .

En théorie, vous pourriez également accéder à l'interface utilisateur, activer le panneau Firebug Net, rechercher les POST de /service et en déduire un chemin d'accès.

2voto

mestachs Points 1050

Le curl est la voie la plus difficile à suivre. Si vous ne voulez pas utiliser maven (ex : non autorisé)

Jetez un coup d'œil à lierre :

Autre option gradle : http://www.gradle.org/docs/current/userguide/artifact_management.html#N14566

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X