Che cosè un repository di artefatti? Se “è solo un posto dove archiviare file, non posso” usare solo un sistema di controllo del codice sorgente?
Answer
Durante sviluppo si genera una discreta quantità di artefatti diversi. Questi potrebbero includere:
- Il codice sorgente
- Lapplicazione compilata
- Un pacchetto distribuibile
- Documentazione
e potenzialmente anche altri
Sebbene tu possa usare un sistema di controllo del codice sorgente per memorizzarli tutti, di solito è estremamente inefficiente, poiché i sistemi di controllo del codice sorgente sono solitamente progettati per gestire file e non file binari. Potresti essere in grado di usarli come un semplice meccanismo di archiviazione, se la maggior parte delle tue versioni sono basate su testo e non devi memorizzare molti dati binari.
I repository di artefatti, tuttavia, sono progettati per archiviare tutti i tipi di file, inclusi quelli binari. Ciò include qualsiasi cosa, dai codici sorgente compressi, alla creazione di risultati, a cose come le immagini docker. Inoltre, di solito non solo memorizzano questi artefatti, ma aiutano anche a gestirli utilizzando varie funzioni aggiuntive, ad esempio:
- Supporto per il controllo delle versioni: memorizzano correttamente alcuni metadati, come quando ogni artefatto è stato creato, qual è la loro versione numero è, memorizza i loro hash, ecc.
- Conservazione: assicurati di conservare solo gli artefatti importanti e di eliminare automaticamente quelli che sono solo istantanee / non più necessari, ecc. in base a vari criteri che puoi impostare
- Controllo degli accessi: imposta chi può pubblicare e chi può scaricare i vari artefatti
- Promozione: capacità di promuovere gli artefatti. Ad esempio, puoi avere artefatti di istantanee con un breve periodo di conservazione su un server vicino ai tuoi programmatori e un repository separato vicino ai server attivi, dove compaiono solo gli artefatti che sono stati considerati distribuibili. Ciò include anche il supporto per vari canali di versione e lo spostamento di artefatti tra di loro (come la promozione di una versione specifica da beta a stabile).
- Agisci come un repository nativo per gli artefatti. Ciò significa che puoi usarlo come repository principale per Maven, Rubygems, Docker, ecc. Questo può anche includere la memorizzazione nella cache di artefatti dai repository ufficiali.
Commenti
- Potrebbe valere la pena aggiungere la capacità del ' channel ' rispetto al supporto di Versionning, avendo la possibilità di avere alcuni macchina indirizzata allultima versione nel canale " sviluppo " e macchina produttrice targeting una versione specifica nel canale " stable ".
- @ Pierre.Vriens ha aggiunto alcuni piccoli commenti, ma forse può essere affrontato anche in una domanda separata
- merci, ma per ogni evenienza, qui è la tua occasione per affrontare ulteriormente il mio commento aggiuntivo …
- Ha senso tenere traccia anche dei file di configurazione o dei dispositivi in questo tipo di repository?
Risposta
Esistono gestori di repository e gestori di repository di pacchetti universali (UPM).
UPM può memorizzare tutti gli artefatti di build per Jenkins, teamcity ecc. e in genere possono anche fungere da gestori di repository per molti diversi tipi di artefatti binari Maven, npm, NuGet e altro.
Questi sarebbero strumenti come Jfrog Artifactory , Inedo ProGet , e Sonatype Nexus .
Un confronto abbastanza decente è qui: https://binary-repositories-comparison.github.io/