Archive los artefactos en Jenkins

132

¿Podría alguien explicarme la idea de los artefactos en el proceso de construcción?

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

¿Dónde debo decirle a mi script de compilació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_IDy tales, ¿cómo puedo decirle a Jenkins qué archivo jar elegir?

EDITAR: Bien, entonces intenté hacer algo como esto:

ingrese la descripción de la imagen aquí

La ruta aún no existe en mi espacio de trabajo, porque se supone que el script de compilación lo crea, y por supuesto, los archivos .jary .propertiesno están allí porque aún no se han generado. ¿Por qué me da un error entonces? Parece que me falta 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.

Miguel
fuente
12
El error que está recibiendo probablemente no sea un problema: si el proceso de compilación es exitoso, debe crearse. Guarde y pruebe esto, tener algunas compilaciones rotas mientras configura la tubería es perfectamente normal. :)
Anders Lindahl
3
No se asuste con la advertencia, si se genera un artefacto después de la compilación, su configuración lo archivará (aunque hay una advertencia en la página de configuración).
Huang F. Lei

Respuestas:

68

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 acumulación en una build, targeto bindirectorio.

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

Anders Lindahl
fuente
@Andres gracias, también, ¿Jenkins elimina los artefactos después de cada compilación (no los artefactos archivados, sé que puedo decir que elimine esos)? o soy responsable de hacerlo myslef?
Michael
66
@michael: debe 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 no terminar con los resultados de una compilación anterior.
Anders Lindahl
@ Michael Puedes agregar un paso de compilación 'limpio'. Por ejemplo, con Maven -sh 'mvn clean package'
Snowcrash
@AndersLindahl: "la convención común es colocar el resultado de una compilación en un directorio de compilación, destino o bin". ¿Te refieres a un directorio bin que comparten todos los proyectos? ¿Cómo puedo hacer eso? ¿Es una acción posterior a la construcción?
user3240688
@ user3240688 No, me refiero a las carpetas de destino por proyecto. Si desea artefactos de varios trabajos en una sola carpeta compartida, deberá publicar los artefactos utilizando, por ejemplo, uno de los complementos "Publicar sobre $ PROTOCOLO".
Anders Lindahl
11

Un artefacto puede ser cualquier resultado de su proceso de construcción. Lo importante es que no importa en qué cliente se haya creado, se transferirá del espacio 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.

Matthias Alleweldt
fuente
3
"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?
Chris Milburn
7

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

No, Hudson / Jenkins, por sí solo, no borra el espacio de trabajo después de una compilación. Es posible que tenga acciones en su proceso de construcció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 la compilación" que borrará el espacio de trabajo al comienzo de una nueva compilación.

Codex24
fuente
1

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

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

Descartar opciones de compilaciones antiguas

Mate
fuente