maven - manager - nexus repository tutorial
Infraestructura con maven, Jenkins, Nexus (5)
Los siguientes argumentos de objetivo maven para maven-release-plugin se pueden usar para pasar la autenticación de repositorio nexus
-Dusername=<> -Dpassword=<>
uso con el proyecto jenkins, línea de comando maven, para la autenticación repo nexus
Estamos usando maven. Quiero configurar la infraestructura para que los artefactos construidos automáticamente se transfieran al repositorio de Nexus. Y luego podrían ser utilizados por los desarrolladores.
Ya configuré a Jenkins con 1 trabajo para nuestro proyecto. Y configuré Nexus en el mismo servidor.
En las computadoras de los desarrolladores, copié la configuración maven predeterminada en C: / Users {user} .m2 / settings.xml agregando esta sección. Referencias
Configurar Maven para usar un solo Nexus
Referencia de configuración Maven
<mirror>
<!--This sends everything else to /public -->
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://myserver:8081/nexus/content/groups/public</url>
</mirror>
(Solo sigo la Gestión de repositorios con el libro Nexus )
¿Cuáles son mis próximos pasos? ¿Debe el trabajo de Jenkins tener mvn install
? ¿Cómo crear repositorio Nexus para artefactos de la compañía?
No necesité hacer ningún cambio en mis proyectos pom.xml. En cambio, en las "Acciones posteriores a la creación" de jenkins, seleccioné "Implementar artefactos en el repositorio Maven", luego seleccioné "Avanzado" y configuré la URL del repositorio en http://nexusserver:8081/nexus/content/repositories/releases
y la ID del repositorio a deploymentRepo
.
En el ~/.m2/settings.xml
en la máquina jenkins agregué
<settings>
<servers>
<server>
<id>deploymentRepo</id>
<username>deployment</username>
<password>deployment123</password>
</server>
</servers>
...
</settings>
Para implementar artefactos en Nexus, deberá incluir una sección de gestión de distribución en su pom. Nexus se envía con repositorios específicos ya configurados para instantáneas y lanzamientos. Debe dar la ruta correcta a cada uno de ellos para que maven despliegue una instantánea y libere artefactos en los repositorios correctos. Luego, cada vez que implemente artefactos, generalmente con mvn deploy
o utilizando el complemento de lanzamiento Maven , los artefactos se implementarán allí. Nexus tiene la autenticación de escritura activada de manera predeterminada, por lo que deberá asegurarse de agregar una sección de servidor con las credenciales correctas a settings.xml de cualquier persona que despliegue artefactos. Jenkins puede ser tratado más o menos como cualquier otro usuario. Si lo tiene hacer una deploy
como su compilación, entonces cada compilación se implementará en Nexus. También hay una acción posterior a la creación para desplegar artefactos en caso de que desee que ocurra más adelante en el trabajo de Jenkins.
Si esta es una pregunta de Jenkins en lugar de una pregunta de Maven, recomendaría utilizar el "Reconstruir artefactos para el repositorio de Maven" incorporado en Jenkins Publicar acción de compilación para la mayoría de los casos.
Ventajas en mi opinión:
- Más portátil (utilizamos diferentes repositorios para diferentes etapas del ciclo de vida), y cada instancia de Jenkins sabe que es su propio repositorio
- Más obvio para cualquiera que lea el trabajo de Jenkins
- Más en línea con la forma Jenkins de hacer las cosas
actualizar pom.xml
<distributionManagement>
...
<repository>
<id>deploymentRepo</id>
<name>Internal Releases</name>
<url>http://nexusserver:8081/nexus/content/repositories/releases</url>
</repository>
...
</distributionManagement>
luego para maven ~/.m2/settings.xml
add (este es el usuario de despliegue predeterminado en Nexus)
<server>
<id>deploymentRepo</id>
<username>deployment</username>
<password>deployment123</password>
</server>
luego mvn deploy
Entonces es posible usar artefactos desplegados en cualquier proyecto, solo como artefactos estándar. En este caso, agregue a 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>
ACTUALIZACIÓN: Más tarde nos alejamos de los repositorios de instantáneas y usamos maven-release-plugin
que solo necesita repositorios del tipo de versión.