2012-03-21 19 views
6

Estoy usando Jenkins para construir proyectos Maven Java y desplegarlos en un repositorio Nexus. También uso Git, aunque estoy más acostumbrado a Subversion así que mi conocimiento de Git es limitado.Incrementando la versión del Proyecto Maven con Jenkins/Git

me gustaría Jenkins/Maven para: rama de la característica

  1. se funden en la rama de integración
  2. Construir fusionada código, unidad de ejecutar las pruebas
  3. Si pasan, incrementan el número de versión Maven
  4. push código fusionado a la rama de integración del origen
  5. Implementar artefacto en el repositorio de Nexus

RECOLECTO la fusión Git se puede lograr de este modo: http://twasink.net/2011/09/20/git-feature-branches-and-jenkins-or-how-i-learned-to-stop-worrying-about-broken-builds/

También he leído mucho sobre el maven-release-plugin.

No estoy seguro de cómo exactamente lograr los resultados anteriores. Si codifico los detalles de SCM en el POM de cada proyecto, ¿no actuará el maven-release-plugin solo en el que en el repositorio en lugar del local de Jenkins?

Si uso una solución para que Jenkins le pase una variable de entorno a Maven para que especifique el número de versión, entonces esperaría tener problemas de resolución de versión local en mi IDE.

+0

Ver [complemento de la versión de maven] (http://mojo.codehaus.org/versions-maven-plugin/) 'versiones de mvn: versiones de use-next-releases' o' mvn: set -DnewVersion = xyz' –

+0

Hola , Probé versiones de mvn: set -DnewVersion = xyz pero cuando el artefacto que se implementa en Nexus parece tener el número de versión anterior, aunque puedo ver en los registros que la variable se pasó a Maven. –

+0

Tiene razón, porque empuja las fuentes originales (antes de la compilación). Tienes que empujar las fuentes desde el espacio de trabajo de jenkins ... –

Respuesta

8

Bien, esto es bastante difícil de hacer. Pero es factible. Déjame explicarte la idea paso a paso.

  1. Primero debemos unir las dos ramas. Esto es bastante fácil de hacer con Jenkins Git plugin, ya que tienen este feature built in: Combinar antes de construir opción está disponible en avanzada sección en la configuración del proyecto.

  2. Así que conseguimos el código fusionado entre esas dos ramas, podemos pasar a la construcción del proyecto, como de costumbre, el proyecto Jenkins del estilo Maven.

  3. Ahora tenemos que incrementar la versión del proyecto y sus módulos, confirmar la rama fusionada y enviar los artefactos al depósito. Y aquí tenemos dos opciones para ir con:

    1. Utilice maven-release-plugin para el trabajo. Sí, es posible, ya que nadie dijo que tendrá que poner las URL en su pom, ya que se puede proporcionar de dos maneras diferentes. El complemento usará uno provisto con el interruptor de línea de comando -DconnectionUrl=. Y si no se proporcionará ninguno, comprobará el archivo release.properties para obtenerlo desde allí. La última reserva es ir a la variable pom.xml ang get ${project.scm.connection}. Así que puedes usar fácilmente el complemento para hacer todo el trabajo sucio sin problemas e introducir esa propiedad usando diferentes técnicas proporcionadas por Jenkins.
    2. Se puede utilizar una combinación de maven-versions-plugin (específicamente dirigidos versiones: set y versiones: comprometerse goles) con maven-scm-plugin para hacer el etiquetado y confirmar los cambios.

    En ambos casos, puede utilizar los pasos Pon con Ejecutar sólo si tiene éxito acumulación opción e invocar el objetivo de Maven de nivel superior como de costumbre. Para todas las configuraciones mencionadas anteriormente o descritas por el plugin particular, hay una opción para proporcionarlas fácilmente en un campo de texto. Para cargar sus artefactos en el repositorio de Nexus, iría con la función de compilación de Jenkins al Implementar artefactos en el repositorio de Maven, que está disponible dentro de la configuración de su proyecto. Esto requerirá que proporcione una configuración de repositorio en la definición de POM o como propiedad.

Espero que cubra todas las preguntas que tenga. Si necesita que sea más específico en cualquier rango de la respuesta, no dude en preguntar.

Cuestiones relacionadas