2011-08-05 28 views
30

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.Infraestructura con maven, Jenkins, Nexus

que ya han establecido Jenkins con 1 trabajo para nuestro proyecto. Y configuré Nexus en el mismo servidor.

En las computadoras de los desarrolladores copié la configuración predeterminada de maven a C: \ Users {user} .m2 \ settings.xml agregando esta sección. Referencias:

Configuring Maven to Use a Single Nexus

Maven Settings Reference

<mirror> 
    <!--This sends everything else to /public --> 
    <id>nexus</id> 
    <mirrorOf>*</mirrorOf> 
    <url>http://myserver:8081/nexus/content/groups/public</url> 
</mirror> 

(Sólo sigo Repository Management with Nexus libro)

¿Cuáles son mis siguientes pasos deben ser? ¿Debería el trabajo de Jenkins tener mvn install? ¿Cómo crear el repositorio de Nexus para los artefactos de la compañía?

Respuesta

16

Para implementar artefactos a Nexus, tendrá que incluir una distributionManagement section 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, normalmente con mvn deploy o usando el maven release plugin, los artefactos se implementarán allí. Nexus tiene autenticación de escritura activada de manera predeterminada, por lo que deberá asegurarse de agregar un server section 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 un 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.

+0

Aunque esto va a trabajar, que obliga a su proyecto para conocer la ubicación de su repositorio de artefactos. Eche un vistazo a [esta respuesta] (http://stackoverflow.com/a/11952832/235179) para que Jenkins maneje el despliegue de artefactos exclusivamente. –

12

actualización pom.xml

<distributionManagement> 
    ... 
    <repository> 
     <id>deploymentRepo</id> 
     <name>Internal Releases</name> 
     <url>http://nexusserver:8081/nexus/content/repositories/releases</url> 
    </repository> 
    ... 
    </distributionManagement> 

luego por experto ~/.m2/settings.xml complemento (esto es fácil de implantación por defecto en Nexus)

<server> 
    <id>deploymentRepo</id> 
    <username>deployment</username> 
    <password>deployment123</password> 
</server> 

continuación mvn deploy

Entonces es posible utilizar artefactos desplegados en cualquier proyecto, solo como artefactos estándar. En este caso se suman 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: Después fuimos lejos de repositorios de instantáneas y estaban usando maven-release-plugin que sólo necesita repositorios de tipo de liberación.

16

yo no tenía necesidad de realizar ningún cambio en mi pom.xml proyectos. En cambio, en los Jenkins "posterior a la generación acciones" que he seleccionado "Implementar artefactos a Maven repositorio" y luego selecciona "Avanzado" y establecer la dirección URL del repositorio a http://nexusserver:8081/nexus/content/repositories/releases y el ID de repositorio a deploymentRepo.

En el ~/.m2/settings.xml en la máquina Jenkins añadió que

<settings> 
    <servers> 
    <server> 
     <id>deploymentRepo</id> 
     <username>deployment</username> 
     <password>deployment123</password> 
    </server> 
    </servers> 
    ... 

</settings> 
+0

La configuración predeterminada de Nexus para repositorios de versiones es permitir el despliegue de 1 versión solo una vez. ¿Tienes un segundo trabajo solo para publicación (es decir, para implementar en Nexus)? –

+1

@PaulVerest Puede agregar un paso previo para ejecutar Shell y ejecutar las versiones 'mvn: set -DnewVersion = 1. $ {BUILD_NUMBER} versions: commit', nombrando la versión después del número de compilación. Luego, cuando se produzca esta acción posterior a la creación, se implementará como esa versión. –

+0

@JoshJohnson Esta fue la respuesta de Steve Brown. Personalmente recomendaría usar maven-release-plugin y no versiones-maven-plugin (versiones: set) –

1

Si se trata de una cuestión Jenkins en lugar de una pregunta Maven, le recomiendo usar el incorporado Jenkins "Implementar artefactos al repositorio Maven" Post construir Acción para la mayoría de los casos.

Ventajas en mi opinión:

  • Más portátil (utilizamos diferentes repositorios para las diferentes etapas del ciclo de vida), y cada instancia Jenkins sabe que es propio repositorio
  • más obvio para cualquiera que lea el trabajo de Jenkins
  • más en línea con la manera de hacer las cosas Jenkins
1

siguientes argumentos meta experto para el experto de liberación-plugin se puede utilizar para pasar el nexu s repositorio de autenticación

-Dusername=<> -Dpassword=<> 

uso con proyecto Jenkins, experta en la línea de comandos, para la autenticación nexo de recompra

Cuestiones relacionadas