2011-04-28 35 views
109

¿Podría alguien explicarme por favor la idea de artefactos en el proceso de compilación?Archivar los artefactos en Jenkins

Tengo el directorio del espacio de trabajo donde reviso el código para compilar y ejecutar mis scripts hormiga, etc. Al final, en mi caso, obtengo un archivo jar que está listo para instalar. ¿Se considera que es el artefacto?

¿Dónde debería decirle al script de construcción que coloque el archivo jar? En el directorio del espacio de trabajo? Mi archivo jar obtiene un nombre de archivo único dependiendo de variables como BUILD_ID y tal, ¿cómo puedo decirle a Jenkins qué archivo jar elegir?

EDIT: bien, así que he intentado hacer algo como esto:

enter image description here

La ruta no existe todavía en mi espacio de trabajo, debido a que el script de construcción se supone que crearlo, y por supuesto, los archivos .jar y .properties no están allí porque aún no se han generado. ¿Por qué me da un error, entonces? Parece que me estoy perdiendo algo.

Además, ¿Jenkins elimina los artefactos después de cada compilación (no los artefactos archivados, sé que puedo decir que los elimine)? De lo contrario, obstruirá el disco duro con bastante rapidez.

+11

El error que está recibiendo es muy probable que no es un problema - si el proceso de construcción tiene éxito, se debe crear. Ahorre y pruebe esto, tener algunas compilaciones rotas mientras configura la tubería es perfectamente normal. :) –

+3

No se asuste con la advertencia, si se genera un artefacto después de la construcción, será archivado por su configuración (aunque hay una advertencia en la página de configuración). –

Respuesta

56

Su comprensión es correcta, un artefacto en el sentido de Jenkins es el resultado de una compilación, el resultado previsto del proceso de compilación.

Una convención común es poner el resultado de una compilación en un directorio build, target o bin.

El archivador de Jenkins puede usar globs (target/*.jar) para recoger fácilmente el archivo correcto, incluso si tiene un nombre único por compilación.

+0

@Andres gracias, también, ¿jenkins borra los artefactos después de cada compilación (no los artefactos archivados, sé que puedo decirle que los elimine)? o soy responsable de hacerlo, ¿verdad? – Michael

+6

@michael: tiene que limpiar el espacio de trabajo usted mismo, es una buena práctica borrar al menos el directorio de destino antes de cada compilación para asegurarse de que no termine con los resultados de una compilación anterior. –

+0

@Michael Puede agregar un paso de compilación 'clean'. P.ej. con Maven - 'paquete limpio' mvn ' – Snowcrash

9

Un artefacto puede ser cualquier resultado de su proceso de compilación. Lo importante es que no importa en qué cliente se haya construido, se transferirá del área de trabajo al maestro (servidor) y se almacenará allí con un enlace a la compilación. La ventaja es que está versionada de esta manera, solo tiene que configurar la copia de seguridad en su maestro y que todos los artefactos son accesibles a través de la interfaz web, incluso si todos los clientes de compilación están fuera de línea.

Es posible definir una expresión regular como el nombre del artefacto. En mi caso, comprimí todos los archivos que quería almacenar en un archivo con un nombre constante durante la compilación.

+1

"Es posible definir una expresión regular como el nombre del artefacto. En mi caso, comprimí todos los archivos" ¿Podría explicar esto? suena exactamente lo que quiero? –

7

Además, ¿Jenkins elimina los artefactos después de cada compilación? (No los artefactos archivados, sé que puedo decirle que los borre)

No, Hudson/Jenkins no borra por sí solo el área de trabajo después de una compilación. Es posible que tenga acciones en su proceso de creación que borren, sobrescriban o muevan artefactos de construcción desde donde los dejó. Hay una opción en la configuración del trabajo, en Opciones de proyecto avanzadas (que debe ampliarse), llamada "Limpiar el espacio de trabajo antes de compilar", que borrará el espacio de trabajo al comienzo de una nueva compilación.

0

En Jenkins 2.60.3 hay una manera de eliminar artefactos de construcción (no los artefactos archivados) para ahorrar espacio en el disco duro en la máquina de compilación. En la sección General, marque "Descartar compilaciones antiguas" con la estrategia "Rotación de logs" y luego vaya a sus opciones Avanzadas.Aparecerán dos opciones más relacionadas con el mantenimiento de artefactos de construcción para el trabajo en función del número de días o construcciones.

Las configuraciones que funcionan para mí son ingresar 1 para "Número máximo de compilaciones para conservar los artefactos" y luego tener una acción posterior a la compilación para archivar los artefactos. De esta forma, todos los artefactos de todas las construcciones se archivarán, toda la información de las compilaciones se guardará, pero solo la última compilación conservará sus propios artefactos.

Discard old builds options

Cuestiones relacionadas