Arquivar os artefatos em Jenkins

132

Alguém poderia me explicar a ideia de artefatos no processo de construção?

Eu tenho o diretório da área de trabalho onde verifico o código para compilar e executar meus scripts ant etc. No final, no meu caso, recebo um arquivo jar que está pronto para instalar. Isso é considerado o artefato?

Onde devo dizer ao meu script de construção para colocar o arquivo jar? No diretório da área de trabalho? Meu arquivo jar obtém um nome de arquivo exclusivo, dependendo de variáveis ​​como BUILD_IDessas, como posso dizer ao Jenkins qual arquivo jar escolher?

Edição: Ok, então eu tentei fazer algo parecido com isto:

insira a descrição da imagem aqui

O caminho ainda não existe no meu espaço de trabalho, porque o script de construção deve criá-lo e, é claro, os arquivos .jare .propertiesnão estão lá porque ainda não foram gerados. Por que isso me dá um erro então? Parece que estou perdendo alguma coisa.

Além disso, o Jenkins exclui os artefatos após cada compilação (não os artefatos arquivados, sei que posso dizer para excluir esses artefatos)? Caso contrário, ele irá entupir o disco rígido rapidamente.

Michael
fonte
12
O erro que você está recebendo provavelmente não é um problema - se o processo de compilação for bem-sucedido, ele deverá ser criado. Salve e tente fazer isso, ter algumas construções quebradas durante a configuração do pipeline é perfeitamente normal. :)
Anders Lindahl
3
Não se assuste com o aviso, se um artefato for gerado após a compilação, ele será arquivado por sua configuração (embora exista um aviso na página de configuração).
Huang F. Lei

Respostas:

68

Seu entendimento está correto, um artefato no sentido de Jenkins é o resultado de uma construção - a saída pretendida do processo de construção.

Uma convenção comum é colocar o resultado de uma compilação em um build, targetou bindiretório.

O arquivador Jenkins pode usar globs ( target/*.jar) para selecionar facilmente o arquivo certo, mesmo que você tenha um nome único por compilação.

Anders Lindahl
fonte
@ André, também, jenkins exclui os artefatos após cada compilação (não os artefatos arquivados, eu sei que posso dizer para excluir esses)? ou sou responsável por fazê-lo?
Michael
6
@michael: Você precisa limpar a área de trabalho, é uma boa prática limpar pelo menos o diretório de destino antes de cada compilação para garantir que você não termine com os resultados de uma compilação anterior.
precisa
@ Michael Você pode adicionar uma etapa de criação 'limpa'. Por exemplo, com Maven - #sh 'mvn clean package'
Snowcrash
@AndersLindahl - "convenção comum é colocar o resultado de uma compilação em um diretório de compilação, destino ou bin". Você está se referindo a um diretório bin compartilhado por todos os projetos? Como faço isso? É uma ação pós-compilação?
user3240688
@ user3240688 Não, estou me referindo às pastas de destino por projeto. Se você deseja artefatos de várias tarefas em uma única pasta compartilhada, será necessário publicar os artefatos usando, por exemplo, um dos plug-ins "Publicar sobre $ PROTOCOL".
Anders Lindahl
11

Um artefato pode ser qualquer resultado do seu processo de construção. O importante é que não importa em qual cliente foi construído, ele será transferido da área de trabalho de volta para o mestre (servidor) e armazenado lá com um link para a compilação. A vantagem é que ele é versionado dessa maneira, você só precisa configurar o backup em seu mestre e que todos os artefatos são acessíveis através da interface da web, mesmo que todos os clientes de construção estejam offline.

É possível definir uma expressão regular como o nome do artefato. No meu caso, zipei todos os arquivos que desejava armazenar em um arquivo com um nome constante durante a compilação.

Matthias Alleweldt
fonte
3
"É possível definir uma expressão regular como o nome do artefato. No meu caso, zipei todos os arquivos" Você poderia explicar isso? soa exatamente o que eu quero?
Chris Milburn
7

Além disso, Jenkins exclui os artefatos após cada construção? (não os artefatos arquivados, eu sei que posso dizer para excluí-los)

Não, o Hudson / Jenkins, por si só, não limpa o espaço de trabalho após uma compilação. Você pode ter ações em seu processo de construção que apagam, substituem ou movem artefatos de construção de onde os deixou. Há uma opção na configuração da tarefa, em Opções Avançadas do Projeto (que deve ser expandida), chamada "Limpar área de trabalho antes da compilação" que limpará a área de trabalho no início de uma nova compilação.

Codex24
fonte
1

No Jenkins 2.60.3, há uma maneira de excluir artefatos de construção (não os artefatos arquivados) para economizar espaço no disco rígido na máquina de construção. Na seção Geral, marque "Descartar construções antigas" com a estratégia "Rotação de log" e entre nas opções avançadas. Aparecerão mais duas opções relacionadas à manutenção de artefatos de construção para a tarefa com base no número de dias ou construções.

As configurações que funcionam para mim são inserir 1 para "Nº máximo de compilações para manter com artefatos" e depois executar uma ação pós-compilação para arquivar os artefatos. Dessa forma, todos os artefatos de todas as construções serão arquivados, todas as informações das construções serão salvas, mas apenas a última construção manterá seus próprios artefatos.

Descartar opções de compilações antigas

Matt
fonte