¿Qué es un artefacto (o artefacto)?

17

La pregunta sobre " ¿Qué es un repositorio de artefactos? " Contiene una respuesta con una explicación interesante sobre la parte del repositorio. Y al leer la respuesta completa, no estoy seguro de qué significa exactamente un " artefacto " en el contexto de DevOps.

¿Alguna sugerencia?

PD: De una de las respuestas, parece que entiendo que tal vez el artefacto es lo que me pregunto (¿confundido?) Sobre ...

Pierre.Vriens
fuente
2
Nuestros amigos de English SE han escrito una opinión sobre "artefacto" vs. "artefacto": english.stackexchange.com/questions/37903/…
7ochem

Respuestas:

19

Wikipedia tiene una muy buena respuesta a esta pregunta. El artefacto , a veces también llamado objeto derivado , es producto de algún proceso aplicado al repositorio de código . Originalmente se llamaron Build Artifacts , pero a medida que se aplicaron más procesos además de build para crearlos, la primera palabra simplemente se eliminó.

La principal distinción es que los artefactos se pueden recrear desde el repositorio de código utilizando el mismo proceso, siempre que haya preservado el entorno en el que se aplicó el proceso. Como este proceso puede llevar mucho tiempo y el entorno se puede preservar de manera imperfecta para poder recrear los artefactos exactamente de la misma manera, comenzamos a almacenarlos en Repositorios de artefactos .

Almacenarlos aparte del repositorio de código en un repositorio de artefactos es una decisión de diseño que tomaría un ingeniero de DevOps. Algunas compañías, a saber, Perforce , sugieren utilizar también su repositorio de código como repositorio de artefactos. Existen diferentes requisitos en términos de acceso , auditoría , tamaños de objetos , etiquetado de objetos y escalabilidad en cada repositorio y, por lo tanto, según la situación, a menudo es mejor usar dos productos distintos. Por ejemplo Gitlos repositorios se copian en su totalidad en cada máquina de desarrollo, por lo que almacenar artefactos en el repositorio de código aumentaría su tamaño más allá de toda razón, aunque últimamente hay formas de mitigar esto. Otra decisión a tomar es qué artefactos almacenar. Algunas compañías almacenan incluso artefactos intermedios como archivos de objetos individuales, para acelerar las reconstrucciones, otras almacenan simplemente los binarios finales. No todos los artefactos tienen el mismo valor. Los artefactos resultantes de una compilación de lanzamiento podrían tener requisitos diferentes a los artefactos resultantes de una compilación de desarrollador.

Los artefactos más comunes son el resultado de los siguientes procesos: configuración , preprocesamiento , compilación , vinculación , pruebas automatizadas , archivado , empaquetado , creación y procesamiento de archivos multimedia , generación de archivos de datos , análisis de documentación , análisis de código , control de calidad , etc.

Jiri Klouda
fuente
La oración sobre el tamaño de git no es totalmente exacta, usando git lfs puede mitigar este problema. (solo una pequeña precisión)
Tensibai
Interesante, eso incluso confirma mi pensamiento (adivinar) aún más. 2 cosas: su enlace forzado necesita ser arreglado y una pregunta adicional: ¿estaría de acuerdo en que "realizar un seguimiento de sus datos de prueba" (la entrada que utilizó y la salida que obtuvo) también podría considerarse como tales artefactos? Y, por cierto, esta respuesta me recuerda acerca de los "niveles de verificación" utilizados en el área de "custodia de software" (si está familiarizado con eso). Empiezo a preguntarme si los temas de custodia de software deberían considerarse como un tema para DevOps ... ¿Quizás @Tensibai también quiera comentar sobre eso?
Pierre.Vriens
1
@ Pierre.Vriens para sus datos de prueba, es difícil hoy en día, si los datos de sus pruebas son un DB, eso no se ajusta a una noción de artefacto. Para el fideicomiso, no tengo idea como es, si las preguntas están lo suficientemente enfocadas, eso me parece bien.
Tensibai
@ Pierre.Vriens Quiero decir que hay tantas cosas que encajan con el nombre 'datos de prueba' (desde un número simple hasta millones de archivos a través de registros DB de muestra) que es demasiado amplio sin contexto.
Tensibai
@ Pierre.Vriens (y lo siento, Jiri por las notificaciones) No creo que las negociaciones contractuales con su proveedor estén en el tema, y ​​lo que usted describe es solo negociación legal de lo que supongo.
Tensibai
7

Hay dos usos de la palabra "artefacto" y uno hace que el código fuente sea un artefacto, mientras que el segundo hace que no sea un artefacto: ¡esto puede ser bastante confuso!

"Artefacto" como una cosa concreta, frente a una cosa ideal : este significado es el significado común de la palabra "un objeto hecho por un ser humano, típicamente uno de interés cultural o histórico" y no es una jerga técnica. Aquí hay un ejemplo en contexto técnico: cuando depura un software, aprende algo sobre el software. A menudo es una inversión valiosa convertir este aprendizaje en un artefacto de software, como una prueba de regresión. De lo contrario, este aprendizaje se olvidará y se desperdiciará el esfuerzo realizado para adquirirlo. En este sentido, el código fuente se considera un artefacto.

"Artefacto" como algo producido por una receta : este significado utiliza la imagen popular del alquimista usando alguna receta esotérica para producir un dispositivo mágico, a menudo llamado artefacto. Es una jerga técnica utilizada para distinguir entre el código fuente, que corresponde a la receta en la metáfora del alquimista, y cualquier cosa derivada de ese código fuente, que corresponde a un artefacto en la metáfora del alquimista. Por ejemplo , acabo de automatizar la producción de artefactos para mi programa plop-fizz, ¡ahora se pueden instanciar tarballs de origen, archivos de firma, paquetes DEB y RPM en un solo comando! Este significado no reconoce el código fuente como un artefacto, ya que el término se usa para denotar lo que se produce a partir de este código fuente.

Michael Le Barbier Grünewald
fuente
3

Supongo que la respuesta puede variar de un lugar a otro. Cuando trabajo en este momento, un artefacto es cualquier cosa consumida por alguna otra entidad, excepto el código fuente utilizado para el desarrollo; esto entra en el control de la fuente.

Esto incluye archivos binarios del producto u otros productos necesarios, bibliotecas, archivos de objetos, artefactos de prueba como archivos multimedia o datos de prueba.

El código fuente no se considera un artefacto. A menos que coincida con la definición de "consumido por", en nuestro caso, incluidas las bibliotecas de terceros, el código de script utilizado para pruebas u otros fines (pero no con la versión de desarrollo en sí).

Rsf
fuente
Hm, interesante, estás confirmando lo que estaba adivinando. ¿Está de acuerdo en que realmente no importa de qué plataforma o sistema operativo estamos hablando? Por ejemplo, incluso para mainframes, uno "podría" usar esta terminología también ... Si es así, ¿puede incluir algo sobre eso en su respuesta, por favor?
Pierre.Vriens
Incluso el código real del control de versiones puede / debe considerarse un artefacto si se consume. Por ejemplo, páginas HTML basadas en plantillas que se implementarán tal cual en un sitio web. Son artefactos de despliegue, que pueden necesitar copiarse explícitamente junto con otros artefactos construidos en alguna ubicación temporal para el despliegue real, por ejemplo. Pero puede que no tenga mucho sentido almacenarlos en un repositorio de artefactos, ya que siempre se pueden obtener del repositorio de código fuente.
Dan Cornilescu
@Pierre Confirmando qué sistema operativo es ortogonal a ser un artefacto, no estoy seguro de por qué debería incluirse en la respuesta, muchas otras cosas también son irrelevantes.
Rsf
0

Nota al margen sobre el lado de la cultura. Mientras que en DevOps consideramos el concepto de "repositorio de artefactos" como una situación dada, parece que no hay tanto vínculo con el proceso organizacional.

Problema cultural: si una organización usa ITIL, las personas certificadas dirían "necesitamos tener una biblioteca multimedia definitiva, un repositorio para colocar los elementos de configuración de software que hemos producido". Por lo tanto, las personas que se preocupan por procesos de TI bien estructurados no saben qué herramientas (que no son de administración) son compatibles y están en uso. Viceversa, si necesita una justificación para un lenguaje Nexus o Artifactory, podría tener dificultades para explicarlo dependiendo de la organización.

Lectura adicional: https://en.wikipedia.org/wiki/Definitive_Media_Library

Peter
fuente
1
Hola. Bienvenido al sitio. Por favor agregue más información a la respuesta. En su estado actual, es solo de enlace y se marcará :)
Dawny33
Si DevOps también se trata de cultura, creo que un enlace a ITIL es importante porque a veces rige a la organización de TI a un nivel organizacional más alto. Se agregó más explicación para aclarar esta simetría de ignorancia.
Peter
1
No creo que realmente aborde la cuestión de qué es un artefacto, pero al menos parece un intento honesto de responder ahora.
Tensibai
Estoy de acuerdo con @Tensibai (ahora), y eliminé mi comentario anterior (ya no es suspenso). Y aunque todo en esta respuesta tiene sentido, todavía no entiendo cómo esta respuesta de "Nota al margen" aborda mi pregunta, que traté de resumir en el título de mi pregunta también, es decir, " ¿Qué es un artefacto (o artefacto)? )? ". Doy la bienvenida a nuevos intentos, ¿de acuerdo?
Pierre.Vriens