Archiver les artefacts dans Jenkins

132

Quelqu'un pourrait-il m'expliquer l'idée des artefacts dans le processus de construction?

J'ai le répertoire de l'espace de travail où je vérifie le code pour compiler et exécuter mes scripts ant, etc. À la fin, dans mon cas, je reçois un fichier jar prêt à être installé. Est-ce considéré comme l'artefact?

Où dois-je dire à mon script de construction de placer le fichier jar? Dans le répertoire de l'espace de travail? Mon fichier jar obtient un nom de fichier unique en fonction de variables BUILD_IDtelles que, comment puis-je indiquer à Jenkins quel fichier jar choisir?

EDIT: D'accord, j'ai donc essayé de faire quelque chose comme ceci:

entrez la description de l'image ici

Le chemin n'existe pas encore dans mon espace de travail, car le script de construction est censé le créer, et bien sûr, les fichiers .jaret .propertiesne sont pas là car ils n'ont pas encore été générés. Pourquoi cela me donne-t-il alors une erreur? Il semble que je manque quelque chose.

De plus, Jenkins supprime-t-il les artefacts après chaque build (pas les artefacts archivés, je sais que je peux lui dire de les supprimer)? Sinon, cela obstruera le disque dur assez rapidement.

Michael
la source
12
L'erreur que vous obtenez n'est probablement pas un problème - si le processus de construction réussit, il doit être créé. Enregistrez et essayez ceci, avoir quelques builds cassés lors de la configuration du pipeline est parfaitement normal. :)
Anders Lindahl
3
Ne soyez pas effrayé par l'avertissement, si un artefact est généré après la construction, il sera archivé par votre configuration (bien qu'il y ait un avertissement dans la page de configuration).
Huang F. Lei

Réponses:

68

Votre compréhension est correcte, un artefact au sens de Jenkins est le résultat d'une construction - la sortie prévue du processus de construction.

Une convention commune est de mettre le résultat d'une construction dans un build, targetou binrépertoire.

L'archiveur Jenkins peut utiliser globs ( target/*.jar) pour récupérer facilement le bon fichier même si vous avez un nom unique par build.

Anders Lindahl
la source
@Andres merci, aussi, est-ce que Jenkins supprime les artefacts après chaque build (pas les artefacts archivés, je sais que je peux lui dire de les supprimer)? ou suis-je responsable de le faire moi-même?
Michael
6
@michael: Vous devez nettoyer vous-même l'espace de travail, c'est une bonne pratique d'effacer au moins le répertoire cible avant chaque build pour vous assurer que vous ne vous retrouvez pas avec les résultats d'une build précédente.
Anders Lindahl
@Michael Vous pouvez ajouter une étape de construction «propre». Par exemple avec Maven -sh 'mvn clean package'
Snowcrash
@AndersLindahl - "La convention courante est de placer le résultat d'une construction dans un répertoire de construction, cible ou bin." Vous parlez d'un répertoire bin partagé par tous les projets? Comment je fais ça? Est-ce une action post-build?
user3240688
@ user3240688 Non, je fais référence aux dossiers cibles par projet. Si vous voulez des artefacts de plusieurs jobs dans un seul dossier partagé, vous devrez publier les artefacts en utilisant par exemple l'un des plugins "Publish over $ PROTOCOL".
Anders Lindahl
11

Un artefact peut être n'importe quel résultat de votre processus de construction. L'important est que peu importe le client sur lequel il a été construit, il sera transféré de l'espace de travail vers le maître (serveur) et y sera stocké avec un lien vers la construction. L'avantage est qu'il est versionné de cette manière, il vous suffit de configurer la sauvegarde sur votre maître et que tous les artefacts sont accessibles via l'interface Web même si tous les clients de build sont hors ligne.

Il est possible de définir une expression régulière comme nom d'artefact. Dans mon cas, j'ai compressé tous les fichiers que je voulais stocker dans un fichier avec un nom constant pendant la construction.

Matthias Alleweldt
la source
3
"Il est possible de définir une expression régulière comme nom d'artefact. Dans mon cas, j'ai zippé tous les fichiers" Pouvez-vous expliquer cela? ça sonne exactement ce que je veux?
Chris Milburn
7

De plus, Jenkins supprime-t-il les artefacts après chaque build? (pas les artefacts archivés, je sais que je peux lui dire de les supprimer)

Non, Hudson / Jenkins n'efface pas à lui seul l'espace de travail après une compilation. Vous pouvez avoir des actions dans votre processus de construction qui effacent, écrasent ou déplacent les artefacts de construction là où vous les avez laissés. Il existe une option dans la configuration du travail, dans les Options de projet avancées (qui doivent être développées), appelée "Nettoyer l'espace de travail avant la construction" qui effacera l'espace de travail au début d'une nouvelle construction.

Codex24
la source
1

Dans Jenkins 2.60.3, il existe un moyen de supprimer les artefacts de construction (pas les artefacts archivés) afin d'économiser de l'espace sur le disque dur sur la machine de construction. Dans la section Général, cochez «Supprimer les anciennes versions» avec la stratégie «Journal de rotation», puis accédez à ses options avancées. Deux autres options apparaîtront liées à la conservation des artefacts de build pour le travail en fonction du nombre de jours ou de builds.

Les paramètres qui fonctionnent pour moi sont de saisir 1 pour "Nombre maximum de builds à conserver avec les artefacts", puis d'avoir une action post-build pour archiver les artefacts. De cette façon, tous les artefacts de toutes les builds seront archivés, toutes les informations des builds seront sauvegardées, mais seule la dernière build conservera ses propres artefacts.

Supprimer les anciennes options de builds

Mat
la source