2011-10-18 22 views
7

Tengo un Jenkins master (ejecutándose en una pequeña caja de Linux) y un esclavo de Jenkins (ejecutándose en una máquina XP "correcta").¿Qué settings.xml usa el esclavo jenkins?

He configurado ambos para que todos los jibs se ejecuten en el esclavo de Windows XP.

Por desgracia, cada vez que una estructura se ejecuta en ese esclavo, la generación falla debido al error siguiente:

ERROR: Ignore Problem expanding maven opts macros org.jenkinsci.plugins.tokenmacro.TokenMacro 
Found mavenVersion 3.0.3 from file jar:file:/E:/java-ext/apache-maven-3.0.3/lib/maven-core-3.0.3.jar!/META-INF/maven/org.apache.maven/maven-core/pom.properties 
Parsing POMs 
ERROR: Echec à la lecture des POMs 
hudson.util.IOException2: remote file operation failed: C:\hudson\workspace\Autocat at [email protected]:ndx-PC-winXP 
    at hudson.FilePath.act(FilePath.java:752) 
    at hudson.FilePath.act(FilePath.java:738) 
    at hudson.maven.MavenModuleSetBuild$RunnerImpl.parsePoms(MavenModuleSetBuild.java:817) 
    at hudson.maven.MavenModuleSetBuild$RunnerImpl.doRun(MavenModuleSetBuild.java:617) 
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:429) 
    at hudson.model.Run.run(Run.java:1374) 
    at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:467) 
    at hudson.model.ResourceController.execute(ResourceController.java:88) 
    at hudson.model.Executor.run(Executor.java:145) 
Caused by: hudson.remoting.ProxyException: hudson.maven.MavenModuleSetBuild$MavenExecutionException: org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs: 
[FATAL] Non-resolvable parent POM: Failure to find fr.perigee.java:java-parent:pom:0.0.6 in http://tinkerpop.com/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of tinkerpop has elapsed or updates are forced and 'parent.relativePath' points at wrong local POM @ line 3, column 10 

Sé que este error se debe a la mala definición de repositorio que contiene los artefactos, ya que se usa repositorio se define en settings.xml. Entonces, mi pregunta es bastante simple: ¿cómo puedo definir qué archivo settings.xml usa un esclavo Jenkins?

Respuesta

6

Como siempre, la solución fue más simple de lo que pensaba.

Jenkins slave está configurado para ser ejecutado por el Usuario del sistema. Como consecuencia, para poder usar mi settings.xml, todo lo que tenía que hacer era cambiar su usuario asociado, ¡y el problema desaparecía!

20

Maven utiliza una configuración global y un archivo de configuración del usuario. Si el archivo de configuración del usuario existe, anula el global.

El global se encuentra en %M2_HOME%\conf\, mientras que el usuario se encuentra en %HOME%\.m2\. Aquí %HOME% se refiere al directorio inicial de cualquier usuario que esté ejecutando el esclavo Jenkins.

Así que la solución más fácil, suponiendo que sea posible en su situación, es simplemente copiar el archivo settings.xml correcto en el directorio %HOME%\.m2\ en la máquina esclava Jenkins.

Alternativamente, puede especificar un archivo settings.xml personalizada en la línea de comandos mvn usando la opción --settings, por lo que podría poner el archivo en una ubicación conocida (por ejemplo C:\) y luego decirle a Jenkins para pasar a la configuración de Maven, algo así como --settings C:\settings.xml.

Como un aparte, a menudo es útil crear un nuevo usuario de Windows para ejecutar el esclavo Jenkins, para que pueda decir fácilmente dónde buscará los archivos de configuración.

+1

Gracias, configuré el servicio esclavo para que se ejecute como usuario local y la configuración.xml en C: /users/myuser/.m2/ finalmente fue recogido. Además: con el usuario del sistema predeterminado y sin otras configuraciones, se usa settings.xml en la carpeta de instalación de maven. – Rob

1

Para mí, lo que hizo que esto funcionara fue el uso de la variable -Duser.home.

¡Lo hice funcionar! Sin embargo, en lugar de ingresándolo en MAVEN_OPTS, en las pantallas de configuración de jenkins, lo ingresé como una variable de nivel de JVM en mi servidor web.

Para mí estoy usando glassfish en WinTell, en lugar de tomcat. Glassfish comienza como un servicio de ventanas . Básicamente entraron:

JVM nombre de la variable: valor user.home JVM: /data/maven-2.2/jenkins

Entonces, en este directorio /data/maven-2.2/jenkins asegúrese de que tiene una copia de un settings.xml válido con la información del proxy ingresada correctamente. Hacerlo me permite aislar un settings.xml por separado para mis compilaciones de servicios de jenkins v. Iniciar sesión en interactivamente.

Eric

Cuestiones relacionadas