Nous utilisons maven. Je souhaite configurer une infrastructure afin que les artefacts créés automatiquement soient transférés vers le référentiel Nexus. Et puis ils pourraient être utilisés par les développeurs.
J'ai déjà créé Jenkins avec 1 emploi pour notre projet. Et j'ai configuré Nexus sur le même serveur.
Sur les PC des développeurs, j'ai copié le paramètre maven par défaut dans C:\Users {user} .m2\settings.xml en ajoutant cette section. Les références:
Configuration de Maven pour utiliser un seul Nexus
Référence des paramètres Maven
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://myserver:8081/nexus/content/groups/public</url>
</mirror>
(Je viens de suivre Gestion du référentiel avec Nexus livre)
Quelles devraient être mes prochaines étapes? Si le travail de Jenkins doit avoir mvn install
? Comment créer un référentiel Nexus pour les artefacts de l'entreprise?
Pour déployer des artefacts sur Nexus, vous devrez inclure un section distributionManagement dans votre pom. Nexus est livré avec des référentiels spécifiques déjà configurés pour les instantanés et les versions. Vous devez donner le chemin correct à chacun de ceux-ci afin que maven déploie un instantané et libère des artefacts dans le bon référentiel. Ensuite, chaque fois que vous déployez des artefacts - généralement avec mvn deploy
ou en utilisant plugin de libération maven , les artefacts y seront déployés. Nexus a l'authentification en écriture par défaut, vous devrez donc vous assurer d'ajouter un section serveur avec les informations d'identification correctes au settings.xml de toute personne qui déploiera des artefacts. Jenkins peut être traité à peu près comme n'importe quel autre utilisateur. Si vous lui faites faire un deploy
comme build, alors chaque build sera déployé sur Nexus. Il existe également une action post-génération pour déployer des artefacts au cas où vous souhaiteriez que cela se produise plus tard dans le travail Jenkins.
Je n'ai pas eu besoin d'apporter de modifications à mes projets pom.xml. Au lieu de cela, dans les jenkins "Actions post-construction", j'ai sélectionné "Déployer les artefacts dans le référentiel Maven", puis sélectionné "Avancé" et défini l'URL du référentiel sur http://nexusserver:8081/nexus/content/repositories/releases
et l'ID du référentiel à deploymentRepo
.
Dans le ~/.m2/settings.xml
sur la machine jenkins j'ai ajouté
<settings>
<servers>
<server>
<id>deploymentRepo</id>
<username>deployment</username>
<password>deployment123</password>
</server>
</servers>
...
</settings>
mise à jour pom.xml
<distributionManagement>
...
<repository>
<id>deploymentRepo</id>
<name>Internal Releases</name>
<url>http://nexusserver:8081/nexus/content/repositories/releases</url>
</repository>
...
</distributionManagement>
puis pour maven ~/.m2/settings.xml
add (il s'agit de l'utilisateur de déploiement par défaut dans Nexus)
<server>
<id>deploymentRepo</id>
<username>deployment</username>
<password>deployment123</password>
</server>
puis mvn deploy
Il est ensuite possible d'utiliser l'artefact déployé dans n'importe quel projet, tout comme les artefacts standard. Dans ce cas, ajoutez à pom.xml
<!-- company repositories -->
<repository>
<id>deploymentRepoReleases</id>
<name>Releases (Nexus)</name>
<url>http://nexusserver:8081/nexus/content/repositories/releases/</url>
</repository>
<repository>
<id>deploymentRepoSnapshots</id>
<name>Snapshots (Nexus)</name>
<url>http://nexusserver:8081/nexus/content/repositories/snapshots/</url>
</repository>
MISE À JOUR: Plus tard, nous nous sommes éloignés des référentiels d'instantanés et utilisions maven-release-plugin
qui n'a besoin que de référentiels de type release.
Les arguments d'objectif maven suivants pour le plug-in maven-release peuvent être utilisés pour passer l'authentification du référentiel nexus
-Dusername=<> -Dpassword=<>
utiliser avec le projet jenkins, ligne de commande maven, pour l'authentification nexus repo
S'il s'agit d'une question Jenkins plutôt que d'une question Maven, je recommande d'utiliser la plupart des cas l'action Jenkins intégrée "Deploy Artifacts to Maven repository".
Avantages à mon avis: