Quali sono le migliori pratiche per il versioning dei tag docker?


11

Di recente ho collegato i nostri server CI per creare immagini docker su git commit.

Abbiamo circa 8 contenitori diversi che vengono creati, ognuno con il proprio linguaggio / framework. Alcuni sono nodi e hanno un package.json, altri sono servizi Python che non contengono informazioni sulla versione semantica.

La mia domanda non riguarda come creare i tag, si tratta di creare i valori per il tag.

Come garantire che ogni tag abbia un numero di versione semantico univoco per le immagini specifiche? Chi dovrebbe essere l'autorità per tracciare / incrementare una versione di build?


Qual è il tuo attuale approccio per la creazione dei tag?
030

Si sente vedere quello che stai chiedendo. Dici "numero di versione semantico", che deve essere assegnato umano (i nostri AI non sono abbastanza avanzati per decidere la semantica di un commit ancora ...). Ma poi chiedi di "incrementare una versione di build". Cosa ti interessa davvero? Vuoi assicurarti che le cose "aumentino" (come un numero di modifica SCN / sistema o altro)? Oppure sei interessato al contenuto semantico del numero di versione (ovvero se presenta modifiche incompatibili)?
AnoE

Risposte:


6

Ti indirizzerei al mio post docker Docker e al controllo del codice sorgente dove dmaze ha risposto dal forum ufficiale.docker.com . È sufficiente eseguire il commit di nome hash e ramo o tag.

Nel tuo Dockerfile, usa un'ETICHETTA per registrare l'origine della build. Ciò probabilmente include l'hash di commit dal controllo del codice sorgente distribuito (git, Mercurial), il nome del ramo se pertinente, eventuali tag di rilascio se presenti e possibilmente dettagli come il timestamp dell'ultimo commit. la cronologia della finestra mobile e l'ispezione finestra mobile dovrebbero essere in grado di mostrarli.

Quando il docker esegue il push delle immagini, spingerle almeno due volte, con l'hash di commit e con il nome del ramo come parte "versione" (quay.io/mycorp/imagename:123abc7, quay.io/mycorp/imagename:dmaze-test ). Se i tag di rilascio sono prontamente disponibili, il sistema CI dovrebbe inviare anche le immagini con questi tag.

Attualmente stiamo usando una combinazione di nome di ramo / hash di commit. Per noi sembra essere abbastanza. i timestamp mentre sono utili IMO aggiungono solo disordine in quanto non forniscono nulla che l'hash di commit non abbia.

Sono d'accordo con 030 per quanto riguarda:

chi dovrebbe essere l'autorità per tracciare / incrementare una versione di build

Il 100% è responsabile dell'IC di mantenere tali aspetti, con un'adeguata comunicazione tra gli altri team.


1

Come garantire che ogni tag abbia un numero di versione semantico univoco per le immagini specifiche?

Si potrebbe creare un tag composto da più elementi, ad esempio una combinazione di un timestamp, hash di commit git e versione semantica. Quest'ultimo deve essere impostato manualmente, mentre i primi due potrebbero essere automatizzati. Tale tag potrebbe apparire come segue:

20171015141729-58617f500f7efe236c7ba6a1dfdf37a478b4c878-0.1.4

Questo tag contiene la data di compilazione, il commit e la versione semantica. Se un'immagine docker viene eseguita in produzione e viene rilevato un bug, si conosce la versione del prodotto, il codice che si trova all'interno e quando l'immagine è stata creata e in quali circostanze.

Chi dovrebbe essere l'autorità per tracciare / incrementare una versione di build?

A mio avviso, ciò dovrebbe essere responsabilità dell'IC in quanto è in grado di automatizzare i processi e poiché la creazione di tag potrebbe essere automatizzata, tale strumento è lo strumento giusto per il lavoro.


1

Suppongo che tu usi uno degli strumenti DevOps per CI / CD come Jenkins, suggerisco il seguente approccio,

Se usi qualcosa come Jenkins-

  • È possibile configurare il proprio lavoro in modo tale da poter utilizzare la variabile d'ambiente "BUILD_ID" di Jenkins, che recupera l'ID build del lavoro quando viene attivato per contrassegnarlo con l'immagine. In questo modo è possibile controllare la versione delle immagini della finestra mobile. Si prega di controllare l'esempio seguente.

ex:- sudo docker build -t <image_name>:<BUILD_ID>

Quindi, se hai un meccanismo simile a un tag per il tuo SCM, puoi controllare il tag nel rispettivo ID build in build basate sul lavoro o in config.xml dell'ID build in JENKINS HOME_FOLDER.

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.