2012-03-15 4 views
13

Tenemos un administrador de repositorio local de Nexus que maneja todos nuestros proyectos internos (así como también refleja repositorios externos). Para nuestros proyectos internos, solo conservamos las compilaciones de instantáneas de la versión más reciente. Por ejemplo, si tuviéramos ProjectX 1.0, 1.1 y 1.2-SNAPSHOT, tan pronto como se liberara 1.2, eliminaríamos 1.2-SNAPSHOT y luego tendremos 1.0, 1.1, 1.2 y 1.3-SNAPSHOT en nuestro repositorio Nexus.¿La mejor manera de manejar instantáneas antiguas en el repositorio local?

El problema es que nuestro servidor Jenkins tiene todas las instantáneas ANTIGUAS en su carpeta .m2/repositorio local y continúa construyendo proyectos con éxito frente a estas viejas instantáneas, cuando en realidad deberían estar fallando (y nuestros desarrolladores deberían arreglar sus Archivos POM)

¿Se puede configurar Can Maven (en settings.xml o pom.xml) para eliminar estas instantáneas no deseadas si no están presentes en el repositorio Nexus?

Si no, ¿cuál es la mejor manera de deshacerse de ellos? Configuración de Jenkins, trabajo cron, otra opción?

Gracias ...

+0

Pregunta relacionada, acerca de cómo _developers_ debería deshacerse de antiguos artefactos marcados en su carpeta local .m2 \ repository: http://stackoverflow.com/q/4275466/223837. –

Respuesta

0

Utilizamos una configuración similar aquí. Tenemos nexus automáticamente borramos instantáneas una vez que se libera el artefacto (para algunos repositorios). Luego, en nuestro servidor continuo, solo tenemos un trabajo cron que una vez al día elimina la carpeta del repositorio local. Esto funciona bien para nosotros

+0

Parece la manera más fácil y menos dolorosa de lidiar con el problema. ¡Gracias! – user1071914

-3

Podría ser un problema de configuración con maven en su servidor jenkins.

experto pueden y deben ser configured para buscar periódicamente actualizados para instantáneas configurando el valor de <updatePolicy> en <repository> sección para <snapshots>.

<updatePolicy>daily</updatePolicy> 

Las opciones son: always, daily (predeterminado), interval:X (donde x es un número entero en minutos) o never.

Además, si la versión cambia (de 1.1-SNAPSHOT a 1.2-SNAPSHOT), no está claro cómo jenkins construiría correctamente con una versión anterior (1.1-SNAPSHOT).

+1

En realidad, estaba haciendo la pregunta opuesta: cómo GET RID de instantáneas automáticamente en el repositorio local, no actualizándolas. Gracias sin embargo. – user1071914

0

Primero, si está utilizando jenkins para construir la mejor práctica para tener compilaciones limpias, lo que significa usar un repositorio local por compilación y no el global del servidor. Además, parece que no utilizas el complemento de lanzamiento para liberar tus artefactos, que verifica automáticamente si un pom contiene SNAPSHOT y fallaría si hubiera alguno. Además, es posible limpiar el repositorio local a través del maven-dependency-plugin. Según mi experiencia, simplemente configuré una tarea que elimina SNAPSHOTs que tienen más de un mes ...

0

En Linux, puede utilizar este comando:

find $HOME/.m2/repository/ \ 
    -name "*-SNAPSHOT" \ 
    -type d \ 
    -mtime +60 \ 
    -print \ 
    -prune \ 
    -exec rm -r "{}" \; 

Explicación:

  • Encontraste algo llamado *-SNAPSHOT en la carpeta $HOME/.m2/repository/
  • y se debe ser un directorio
  • Y no debe haber sido modificado en los últimos 60 días
  • Imprima lo que ha encontrado. Si desea probar el comando, deténgase aquí
  • El -exec borrará la carpeta, -prune le indica que no intente ingresar a la carpeta posteriormente.
  • El -exec eliminará la carpeta y los archivos dentro.
Cuestiones relacionadas