Archivia i manufatti in Jenkins


132

Qualcuno potrebbe spiegarmi l'idea di artefatti nel processo di compilazione?

Ho la directory dell'area di lavoro in cui controllo il codice per compilare ed eseguire i miei script di formica ecc. Alla fine, nel mio caso, ottengo un file jar pronto per l'installazione. È considerato questo il manufatto?

Dove devo dire al mio script di compilazione di mettere il file jar? Nella directory dell'area di lavoro? Il mio file jar ottiene un nome file univoco a seconda di variabili come BUILD_IDe simili, come posso dire a Jenkins quale file jar scegliere?

EDIT: Okay, quindi ho provato a fare qualcosa del genere:

inserisci qui la descrizione dell'immagine

Il percorso non esiste ancora nel mio spazio di lavoro, perché lo script di compilazione dovrebbe crearlo e, naturalmente, i file .jare .propertiesnon sono presenti perché non sono ancora stati generati. Perché allora mi dà un errore? Sembra che mi manchi qualcosa.

Inoltre, Jenkins elimina i manufatti dopo ogni build (non i manufatti archiviati, so di poterlo dire per eliminarli)? Altrimenti ostruirà il disco rigido abbastanza rapidamente.


12
Molto probabilmente l'errore che stai riscontrando non è un problema: se il processo di compilazione ha esito positivo, dovrebbe essere creato. Salva e prova questo, avere alcune build rotte durante l'impostazione della pipeline è perfettamente normale. :)
Anders Lindahl,

3
Non essere spaventato dall'avvertimento, se un manufatto viene generato dopo la compilazione, verrà archiviato dalla tua configurazione (anche se c'è un avviso nella pagina di configurazione).
Huang F. Lei,

Risposte:


68

La tua comprensione è corretta, un artefatto nel senso di Jenkins è il risultato di una build - l'output previsto del processo di build.

Una convenzione comune è quello di mettere il risultato di una costruzione in una build, targeto di bindirectory.

L'archiviatore Jenkins può usare globs ( target/*.jar) per raccogliere facilmente il file giusto anche se hai un nome univoco per build.


@Andres grazie, inoltre, jenkins elimina i manufatti dopo ogni build (non i manufatti archiviati, so di poterlo dire per eliminarli)? o sono responsabile di farlo myslef?
Michael,

6
@michael: devi pulire da solo lo spazio di lavoro, è buona norma cancellare almeno la directory di destinazione prima di ogni build per assicurarti di non finire con i risultati di una build precedente.
Anders Lindahl,

@Michael È possibile aggiungere un passaggio di costruzione 'pulito'. Ad esempio con Maven -sh 'mvn clean package'
Snowcrash,

@AndersLindahl - "la convenzione comune è quella di inserire il risultato di una build in una directory build, target o bin." Ti riferisci a una directory bin condivisa da tutti i progetti? Come lo faccio? È un'azione post-build?
user3240688

@ user3240688 No, mi riferisco alle cartelle di destinazione per progetto. Se desideri artefatti da più lavori in un'unica cartella condivisa, dovrai pubblicarli usando ad esempio uno dei plugin "Pubblica oltre $ PROTOCOL".
Anders Lindahl l'

11

Un artefatto può essere qualsiasi risultato del tuo processo di costruzione. L'importante è che non importa su quale client è stato creato, verrà trasferito dallo spazio di lavoro al master (server) e memorizzato lì con un collegamento alla build. Il vantaggio è che è versione in questo modo, devi solo impostare il backup sul tuo master e che tutti gli artefatti sono accessibili tramite l'interfaccia web anche se tutti i client di build sono offline.

È possibile definire un'espressione regolare come nome del manufatto. Nel mio caso ho compresso tutti i file che volevo archiviare in un file con un nome costante durante la compilazione.


3
"È possibile definire un'espressione regolare come nome del manufatto. Nel mio caso ho compresso tutti i file" Potresti spiegarlo? suona esattamente quello che voglio?
Chris Milburn,

7

Inoltre, Jenkins elimina i manufatti dopo ogni build? (non i manufatti archiviati, so di poterlo dire per eliminarli)

No, Hudson / Jenkins, da solo, non cancella l'area di lavoro dopo una build. Potresti avere azioni nel tuo processo di creazione che cancellano, sovrascrivono o spostano gli artefatti da dove li hai lasciati. C'è un'opzione nella configurazione del lavoro, in Opzioni di progetto avanzate (che deve essere espansa), chiamata "Pulisci spazio di lavoro prima della compilazione" che cancellerà l'area di lavoro all'inizio di una nuova build.


1

In Jenkins 2.60.3 esiste un modo per eliminare gli artefatti di compilazione (non gli artefatti archiviati) al fine di risparmiare spazio sul disco rigido sulla macchina di compilazione. Nella sezione Generale, seleziona "Elimina le vecchie build" con la strategia "Rotazione dei registri", quindi vai nelle sue Opzioni avanzate. Appariranno altre due opzioni relative alla conservazione degli artefatti di build per il lavoro in base al numero di giorni o build.

Le impostazioni che funzionano per me sono di inserire 1 per "Numero massimo di build da mantenere con gli artefatti" e quindi di avere un'azione post-build per archiviare gli artefatti. In questo modo, tutti gli artefatti di tutte le build verranno archiviati, tutte le informazioni delle build verranno salvate, ma solo l'ultima build manterrà i propri artefatti.

Elimina le vecchie opzioni di build

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.