3
votes

Q: Comment puis-je enregistrer un artefact dans le référentiel Nexus à l'aide d'un pipeline groovy?

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?


0 commentaires

3 Réponses :


4
votes

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


9 commentaires

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. ;)



2
votes

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**'    }
  • Dans le champ filePath, nous devons insérer le chemin et le nom du fichier artifact.jar.
  • Dans le champ artifactId, nous devons insérer l'ID d'artefact personnalisé (dans cette occasion pour l'artefact de la mine)
  • Dans le champ tagName, nous devons insérer le nom personnalisé du répertoire depuis l'intérieur du référentiel Nexus

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.


1 commentaires

@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!



3
votes

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 .


4 commentaires

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. :)