O que é um artefato (ou artefato)?

17

A pergunta sobre " O que é um repositório de artefato? " Contém uma resposta com uma explicação interessante sobre a parte do repositório. E ao ler a resposta inteira, não tenho certeza do que exatamente um " artefato " significa no contexto do DevOps.

Alguma sugestão?

Ps: De uma das respostas, eu entendo que talvez artefato seja o que eu estou pensando (confuso?) Sobre ...

Pierre.Vriens
fonte
2
Nossos amigos de Inglês SE ter escrito uma vista em "artefato" versus "artefato": english.stackexchange.com/questions/37903/...
7ochem

Respostas:

19

A Wikipedia tem uma resposta muito boa para essa pergunta. O artefato , às vezes também chamado de Objeto Derivado , é um produto de algum processo aplicado ao Repositório de Código . Originalmente, eles eram chamados de Artefatos de Construção , mas, à medida que mais processos eram aplicados, além da construção, para criá-los, a primeira palavra era simplesmente descartada.

A principal distinção é que os artefatos podem ser recriados do repositório de código usando o mesmo processo, desde que você tenha preservado o ambiente no qual o processo foi aplicado. Como esse processo pode ser demorado e o ambiente pode ser preservado de maneira imperfeita para poder recriar os artefatos exatamente da mesma maneira, começamos a armazená-los nos Repositórios de Artefatos .

Armazená-los separadamente do Code Repository em um Repositório de Artefatos é uma decisão de design que um engenheiro do DevOps tomaria. Algumas empresas, nomeadamente o Perforce , sugerem o uso do Repositório de Código como Repositório de Artefato. Existem requisitos diferentes em termos de acesso , auditoria , tamanhos de objeto , marcação de objetos e escalabilidade em cada repositório e, portanto, dependendo da situação, geralmente é melhor usar dois produtos distintos. Por exemplo Gitos repositórios são copiados na íntegra para todas as máquinas de desenvolvimento e, portanto, o armazenamento de artefatos no repositório de códigos aumentaria seu tamanho além de qualquer motivo, embora ultimamente haja maneiras de mitigar isso. Outra decisão a tomar é quais artefatos armazenar. Algumas empresas armazenam até artefatos intermediários como arquivos de objetos individuais, para acelerar a recriação, outras armazenam apenas os binários finais. Nem todos os artefatos têm o mesmo valor. Os artefatos resultantes de uma construção de liberação podem ter requisitos diferentes dos artefatos resultantes de uma construção de desenvolvedor.

Os artefatos mais comuns são resultados dos seguintes processos: Configuração , Pré-processamento , Compilação , Vinculação , Teste Automatizado , Arquivamento , Empacotamento , criação e processamento de arquivos de mídia , Geração de Arquivo de Dados , Análise de Documentação , Análise de Código , Controle de Qualidade , etc.

Jiri Klouda
fonte
A frase sobre o tamanho do git não é totalmente exata. Usando o git lfs, você pode atenuar esse problema. (apenas uma pequena precisão)
Tensibai 10/03/2017
Interessante, isso confirma meu pensamento (adivinhação) ainda mais. 2 coisas: seu link forçado precisa de correção e uma pergunta extra: você concorda que "manter o controle de seus dados de teste" (a entrada que você usou e a saída que você obteve) também pode ser considerado como artefato? E, BTW, esta resposta me lembra os "níveis de verificação" usados ​​na área de "garantia de software" (se você estiver familiarizado com isso). Começo a pensar nos tópicos de garantia de software que devem ser considerados no DevOps ... Talvez @Tensibai também queira comentar sobre isso?
Pierre.Vriens
1
@ Pierre.Vriens para os dados de teste, é difícil, se os dados de teste forem um banco de dados, que não se encaixam em uma noção de artefato. Para custódia, não tenho idéia do que é, se as perguntas forem suficientemente focadas que me pareçam aceitáveis.
Tensibai 10/0317
@ Pierre.Vriens Quero dizer, existem muitas coisas que cabem no nome 'dados de teste' (de número simples a milhões de arquivos por meio de registros de amostra de banco de dados) que são muito amplas sem contexto.
Tensibai
@ Pierre.Vriens (e desculpe Jiri pelas notificações) Eu não acho que as negociações contratuais com seu provedor estejam no tópico, e o que você descreve é ​​apenas uma negociação legal para o que eu acho.
Tensibai 10/0317
7

Existem dois usos da palavra “artefato” e um torna o código-fonte um artefato enquanto o segundo faz com que não seja um artefato: isso pode realmente ser bastante confuso!

“Artefato” como uma coisa concreta versus uma coisa ideal - esse significado é o significado comum da palavra “um objeto feito por um ser humano, tipicamente de interesse cultural ou histórico” e não é um jargão técnico. Aqui está um exemplo no contexto técnico: Ao depurar um software, você aprende algo sobre o software. Muitas vezes, é um investimento valioso transformar esse aprendizado em um artefato de software, como um teste de regressão. Caso contrário, esse aprendizado será esquecido e o esforço feito para adquiri-lo será desperdiçado. Nesse sentido, o código fonte é considerado um artefato.

“Artefato” como algo produzido por uma receita - esse significado usa a imagem popular do alquimista usando alguma receita esotérica para produzir um dispositivo mágico, geralmente chamado de artefato. É um jargão técnico usado para distinguir entre o código fonte, que corresponde à receita na metáfora do alquimista, e qualquer coisa derivada desse código fonte, que corresponde a um artefato na metáfora do alquimista. Por exemplo, eu apenas automatizei a produção de artefatos para o meu programa plop-fizz, agora tarballs de origem, arquivos de assinatura, pacotes DEB e RPM podem ser instanciados em apenas um comando! Esse significado não reconhece o código fonte como um artefato, pois o termo é usado para indicar o que é produzido a partir desse código fonte.

Michael Le Barbier Grünewald
fonte
3

Suponho que a resposta possa variar de um lugar para outro. Onde eu trabalho no momento, um artefato é qualquer coisa consumida por alguma outra entidade, exceto pelo código-fonte usado para o desenvolvimento - isso entra no controle de origem.

Isso inclui binários do produto ou outros produtos necessários, bibliotecas, arquivos de objetos, artefatos de teste como arquivos de mídia ou dados de teste.

O código-fonte não é considerado um artefato. A menos que corresponda à definição de "consumido por" - no nosso caso, incluindo bibliotecas de terceiros, código de script usado para teste ou outros fins (mas não a versão de desenvolvimento em si).

Rsf
fonte
Interessante, você está confirmando o que eu estava adivinhando. Você concorda que realmente não importa de que plataforma ou sistema operacional estamos falando? Por exemplo, mesmo para mainframes, um "pode" usar essa terminologia também ... Se sim, você também pode incluir algo sobre isso em sua resposta, por favor?
Pierre.Vriens
Mesmo o código real do controle de versão pode / deve ser considerado um artefato se consumido. Por exemplo, páginas HTML baseadas em modelo a serem implantadas como estão em um site. Eles são artefatos de implementação, que podem precisar ser explicitamente copiados juntamente com outros artefatos criados em algum local temporário para a implementação real, por exemplo. Mas pode não fazer muito sentido armazená-los em um repositório de artefatos, pois eles sempre podem ser obtidos no repositório de código-fonte.
precisa
@Pierre Confirmando que SO é ortogonal a um artefato, não sei por que ele deve ser incluído na resposta. Muitas outras coisas também são irrelevantes.
Rsf
0

Nota lateral no lado da cultura. Enquanto no DevOps consideramos o conceito de "repositório de artefatos" como uma determinada situação, parece não haver muita ligação com o processo organizacional.

Problema de cultura: se uma organização usa o ITIL, as pessoas certificadas diriam "precisamos ter uma biblioteca de mídia definitiva, um repositório para colocar os itens de configuração de software que produzimos". Portanto, as pessoas que se preocupam com processos de TI bem estruturados não sabem quais ferramentas (não de gerenciamento) suportam isso e estão em uso. Vice-versa, se você precisar de uma justificativa para um idioma Nexus ou Artifactory, poderá ser difícil explicá-lo, dependendo da organização.

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

Pedro
fonte
1
Oi. Bem vindo ao site. Adicione mais informações à resposta. Em seu estado atual, é link-somente, e será sinalizado :)
Dawny33
se o DevOps também é sobre cultura, acho importante um link para o ITIL, porque às vezes ele governa a organização de TI em um nível organizacional mais alto. Adicionadas mais explicações para esclarecer essa simetria da ignorância.
Peter Peter
1
Eu não acho que realmente resolva a questão do que é um artefato, mas pelo menos parece uma tentativa honesta de responder agora.
Tensibai
Concordo com @Tensibai (agora) e excluí meu comentário anterior (não é mais suspeito). E mesmo que tudo nesta resposta faça sentido, eu ainda não entendo como essa resposta "Observação" aborda minha pergunta, que tentei resumir também no título da pergunta, ou seja, " O que é um artefato (ou artefato) )? ". Congratulo-me com novas tentativas, ok?
Pierre.Vriens