2012-05-10 17 views
6

Mi proyecto java/experto llamado "TestProject" está conectado con mis Jenkins y nexo de recompra:Jenkins experto frasco para desplegar nexo - artefacto nombrar

Mi pom.xml parece:

....  
<distributionManagement> 
    <!-- use the following if you're not using a snapshot version. --> 
    <repository> 
     <id>nexus</id> 
     <name>RepositoryProxy</name> 
     <url>http://nexus:8080/nexus/content/repositories/releases</url> 
    </repository> 
    <!-- use the following if you ARE using a snapshot version. --> 
    <snapshotRepository> 
     <id>nexus</id> 
     <name>RepositoryProxy</name> 
     <url>http://nexus:8080/nexus/content/repositories/snapshots</url> 
    </snapshotRepository> 
</distributionManagement> 
...... 

En mis Jenkins establecidos, que tienen:

Build - maven3 - clean deploy 

como era de esperar, Jenkins carga el artefacto a Nexus.Look en la salida de la consola de Jenkins construir, como a continuación:

[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ testproject --- 
[INFO] Building jar: /var/lib/jenkins/workspace/testproject/target/testproject-0.1-SNAPSHOT.jar 
[INFO] 
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ testproject --- 
[INFO] Installing /var/lib/jenkins/workspace/testproject/target/testproject-0.1-SNAPSHOT.jar to /var/lib/jenkins/.m2/repository/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1- SNAPSHOT.jar 
[INFO] Installing /var/lib/jenkins/workspace/testproject/pom.xml to /var/lib/jenkins/.m2/repository/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-SNAPSHOT.pom 
[INFO] 
[INFO] --- maven-deploy-plugin:2.5:deploy (default-deploy) @ testproject --- 
Downloading: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/maven-metadata.xml 
Downloaded: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/maven-metadata.xml (1012 B at 28.2 KB/sec) 
Uploading: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-20120509.161644-74.jar 
Uploaded: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-20120509.161644-74.jar (47 KB at 748.5 KB/sec) 
Uploading: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-20120509.161644-74.pom 
Uploaded: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-20120509.161644-74.pom (6 KB at 149.3 KB/sec) 

Las preguntas son:

Dada la versión que se especifica en pom.xml es

<version>0.1-SNAPSHOT</version> 
  1. ¿Cómo es que Jenkins subir testproject- 0.1-20120509.161644-74 .jar a ¿Nexo? ¿De dónde viene el material 20120509.161644-74?

  2. si la marca de tiempo 20120509.161644-74 es generada por jenkins antes de la carga, ¿puedo configurar el formato de la misma? Quiero tener algo así como TestProject-01 - $ {} marca de tiempo - $ {} reversionId .jar

Respuesta

8

El maven deploy plugin page dice que "De manera predeterminada, cuando una versión instantánea de un artefacto se implementa en un repositorio, una la marca de tiempo tiene el sufijo ". Por lo tanto, es creado por el complemento cuando llamas al mvn deploy.

No sé si lo que quiere en 2) es posible. Creo que podría causarle problemas a maven.

Cuando utiliza maven con dependencias SNAPSHOT, las marcas de tiempo se utilizan para buscar la versión más reciente de SNAPSHOT. Cambiar el formato de las instantáneas probablemente haga que este mecanismo falle.

+2

Y una cosa más: esto es solo así desde maven 3, Algunos más [info] (http://stackoverflow.com/questions/4275466/how-do-you-deal-with-maven-3-timestamped- instantáneas de manera eficiente) – Miquel

+0

Creo que esto podría ayudar: http://maven.apache.org/plugins/maven-deploy-plugin/examples/disabling-timestamps-suffix.html –

+1

Es por eso que publiqué este enlace en mi respuesta. :-) – Behe

2

La marca de tiempo se agrega dentro de una versión de SNAPSHOT desde Maven 3. El mismo complemento de implementación cuando se ejecuta con Maven 2 no agrega ninguna marca de tiempo.

1

Esa es la manera de Maven de bloquear una versión de una instantánea para que una versión específica pueda ser consumida por otra compilación; de alguna manera resuelve el problema, pero tiene fallas.

He recorrido las casas con instantáneas. Yo creo que son simplemente malvados. La repetibilidad de las compilaciones es un dolor de cabeza, ya que es tedioso correlacionar una versión de instantáneas con marcas de tiempo desplegadas en el repositorio con un envío de código particular.

Ahórrese serios problemas y haga que su servidor de compilación llame a las versiones de mvn: configure -DnewVersion = .. $ {build.number} en su servidor de compilación antes de compilar/desplegar. Etiqueta tu código fuente con la misma versión. Si la compilación falla, no importa, la compilación se puede configurar para actualizar el espacio de trabajo, lo que hace que los cambios en el archivo pom.xml sean irrelevantes.

Otro "truco" típico de Maven al usar instantáneas es que no está seguro de qué versiones de dependencias su pom podría estar consumiendo durante la compilación, así que asegúrese de que su compilación llame a la dependencia: árbol y dependencia: lista, que precede otros argumentos de compilación mvn. (Esto te ayudará a identificar inconsistencias de versión del mismo artefacto durante la resolución transitiva; lo juro por la sección DependencyManagement en mis compilaciones ahora).

Mientras que Maven recorre un largo camino, el "Maven Way" no siempre es la mejor solución. No es bastante lo suficientemente maduro para las mejores prácticas de Entrega continua, pero aún así puede trabajar con eficacia, siempre que esté al tanto de las dificultades.

Cuestiones relacionadas