Ma question concerne l'enregistrement des artefacts dans un référentiel. En particulier, j'essaie de télécharger dans le référentiel Nexus des artefacts et des versions de publication après l'exécution d'un pipeline de construction pour un projet Maven (via Jenkins).
La seule façon dont je veux le faire, c'est simplement en utilisant un pipeline écrit en Groovy afin de l'intégrer à Jenkins.
Remarque: je souhaite que le numéro de version de l'artefact soit toujours le même et que le numéro de version change dynamiquement (pas manuellement).
Existe-t-il une commande ou un code en général qui me permet de faire cela?
3 Réponses :
Vous êtes au mauvais niveau, cela devrait arriver dans maven. Dans pom.xml, vous avez besoin. ( plus ici )
nexusArtifactUploader { nexusVersion('nexus2') protocol('http') nexusUrl('localhost:8080/nexus') groupId('sp.sd') version("2.4.${env.BUILD_NUMBER}") repository('NexusArtifactUploader') credentialsId('44620c50-1589-4617-a677-7563985e46e1') artifact { artifactId('nexus-artifact-uploader') type('jar') classifier('debug') file('nexus-artifact-uploader.jar') } artifact { artifactId('nexus-artifact-uploader') type('hpi') classifier('debug') file('nexus-artifact-uploader.hpi') } }
puis dans la section plugins
<plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> <executions> <execution> <id>default-deploy</id> <phase>deploy</phase> <goals> <goal>deploy</goal> </goals> </execution> </executions> </plugin>
et vous devriez pouvoir simplement faire mvn clean deploy
à partir de votre pipeline.
MODIFIER Il existe un autre moyen avec plugin Nexus Artifact Uploader
XXX
Hmm le truc, c'est que je veux que Jenkins exécute cette action. Je ne veux pas de Maven. Il doit y avoir une solution ou non? Votre solution fonctionne mais pas pour mon problème. J'essaye de le résoudre 3 jours maintenant ...
J'ai juste essayé. Je peux télécharger des versions mais je ne peux pas le faire pour les artefacts. Je veux dire que Nexus accepte la nouvelle version que je télécharge, mais n'accepte pas la version d'artefact (qui est le même numéro à chaque fois). La solution est proche je pense.
Vous devez en augmenter le numéro de version à chaque téléchargement d'artefact.
J'ai mis à jour ma réponse avec la version ("2.4. $ {Env.BUILD_NUMBER}"), vous devez vraiment vous en occuper vous-même. C'est l'un des moyens. Nous sommes également très loin de la question initiale maintenant.
J'ai alors édité ma question pour ne pas sortir du sujet. Votre nouvelle réponse fonctionne aussi mais voici encore ce "2.4" à venir. J'attendrai de voir s'il existe un moyen de lire le numéro de la version à partir d'un fichier et de le tirer dans un crochet.
Je pense que nous avons terminé ici, la question initiale a été répondue, vous cherchez juste quelqu'un pour coder pour vous. Je vais signaler cela.
N'hésitez pas à le faire. Je n'attends pas que quelqu'un donne toute la solution. Mais j'ai écrit que je le veux dans Groovy (pas théoriquement). Lorsque vous voulez faire quelque chose automatiquement, vous ne devez pas inclure de processus manuels. Si la question ne reçoit pas de réponse automatique, je ne vais pas la fermer.
J'ai essayé à nouveau ma solution mais cette fois j'avais un problème. Le vôtre était le meilleur pour la nouvelle tâche. Ma solution fonctionnait uniquement pour le problème précédent que j'avais. Désolé de ne pas avoir répondu comme il y a des jours. Je l'ai réparé maintenant :) Une fois plus triste. Je n'en avais aucune idée. J'ai également édité la question pour être claire et pour les autres. J'espère que cela répond aux exigences maintenant.
Ce serait injuste si je ne le faisais pas. ;)
SOLUTION SUPPLÉMENTAIRE QUI FONCTIONNE ÉGALEMENT
Je l'ai exécutée manuellement et j'ai exporté le résultat de l'appel Nexus. Le résultat était la commande suivante. Cette commande doit être insérée dans le pipeline Jenkins en tant que code Groovy:
nexusPublisher nexusInstanceId: 'nexus', nexusRepositoryId: 'maven-play-ground', packages: [[$class: 'MavenPackage', mavenAssetList: [[classifier: '', extension: '', filePath: '**PATH_NAME_OF_THE_ARTIFACT**.jar']], mavenCoordinate: [artifactId: '**YOUR_CUSTOM_ARTIFACT_ID**', groupId: 'maven-play-ground', packaging: 'jar', version: '1.0']]], tagName: '**NAME_OF_THE_FILE_IN_THE_REPOSITORY**' }
C'est une solution qui peut être effectuée automatiquement sans modifications ni modifications manuelles. Une fois que nous avons créé le répertoire dans le référentiel Nexus, cela va être exécuté sans aucun problème et sans qu'il soit nécessaire de changer le numéro de version.
Remarque: nous devons également activer la fonction de redéploiement depuis l'intérieur du Nexus Paramètres du référentiel.
@hakamairi votre réponse n'a pas été complétée mais a été le début de ma pensée pour la résoudre. Je vous en suis reconnaissant!
Comme @hakamairi l'a déjà dit, il n'est pas recommandé de télécharger à nouveau des artefacts avec la même version dans le référentiel Nexus, Maven est construit autour de l'idée que le GAV d'un artefact correspond toujours à un artefact unique.
Cependant, si vous souhaitez autoriser le redéploiement, vous devez définir la politique de déploiement d'un référentiel de versions sur "autoriser le redéploiement", vous pouvez alors redéployer la même version. Vous ne pouvez pas faire cela sans autoriser du côté du dépôt.
Et pour le déploiement sur Nexus repo, vous pouvez utiliser Nexus Platform Plugin ou Nexus Artifact Uploader .
Le redéploiement de l'artefact est un processus courant. De nombreuses entreprises informatiques le font. Bien que je vous remercie pour votre réponse. Je téléchargerai dans quelques jours un autre numéro et je vous mentionnerai pour voir de quoi je parle. Merci @ biruk1230
Oui, je sais que certaines entreprises effectuent un redéploiement, mais ce n'est toujours pas recommandé :) Comme je l'ai dit, essayez d'activer "autoriser le redéploiement" dans la configuration de votre serveur de référentiel Nexus.
Tu as raison! Je l'ai fait avant la mise en œuvre du code. Je modifierai ma réponse pour ceux qui la verront à l'avenir. Merci encore une fois @ biruk1230
Le paramètre de redéploiement je l'avais déjà activé. J'ai juste oublié de l'insérer comme réponse @ biruk1230. Vous m'en êtes souvenu. :)