Jakie są najlepsze praktyki dotyczące wersjonowania tagów dokerów?


11

Niedawno podłączyłem nasze serwery CI, aby budować obrazy dokerów po git commit.

Mamy około 8 różnych kontenerów, z których każdy ma swój własny język / frameworki. Niektóre są węzłami i mają pakiet.json, inne to usługi python, które nie zawierają semantycznej informacji o wersji.

Moje pytanie nie dotyczy sposobu tworzenia tagów, ale tworzenia wartości tagu.

Jak upewnić się, że każdy znacznik ma unikalny semantyczny numer wersji dla określonych obrazów? Kto powinien być uprawniony do śledzenia / zwiększania wersji kompilacji?


Jakie jest Twoje obecne podejście do tworzenia tagów?
030

Słychać, aby zobaczyć, o co pytasz. Mówisz „semantyczny numer wersji”, który musi być przypisany przez człowieka (nasze AI nie są jeszcze wystarczająco zaawansowane, aby decydować o semantyce zatwierdzenia…). Ale potem pytasz o „zwiększenie wersji kompilacji”. Czym zatem jesteś zainteresowany? Czy chcesz się upewnić, że rzeczy po prostu „zwiększają” (np. Numer zmiany SCN / systemu lub cokolwiek innego)? A może interesuje Cię treść semantyczna numeru wersji (tj. Czy zawiera ona niezgodne zmiany)?
AnoE

Odpowiedzi:


6

Chciałbym skierować cię do mojego rejestru dokowania Łączenie i kontroli źródła, gdzie dmaze odpowiedział z oficjalnego forums.docker.com . Wystarczy wpisać skrót lub nazwę oddziału lub tagi.

W swoim Dockerfile użyj LABEL, aby zapisać źródło kompilacji. Prawdopodobnie obejmuje to skrót zatwierdzenia z rozproszonej kontroli źródła (git, Mercurial), nazwę gałęzi, jeśli dotyczy, wszelkie znaczniki wydania, jeśli są obecne, i ewentualnie szczegóły, takie jak znacznik czasu ostatniego zatwierdzenia. Historia dokerów i inspekcja dokerów powinny być w stanie je pokazać.

Podczas dokowania pchaj zdjęcia, popychaj je co najmniej dwa razy, używając skrótu zatwierdzenia i nazwy gałęzi jako części „wersji” (quay.io/mycorp/imagename:123abc7, quay.io/mycorp/imagename:dmaze-test ). Jeśli tagi wydania są łatwo dostępne, system CI powinien również przesyłać obrazy z tymi tagami.

Obecnie używamy kombinacji nazwy oddziału / skrótu zatwierdzenia. Dla nas to wydaje się wystarczające. znaczniki czasu, gdy są przydatne IMO, po prostu dodają bałaganu, ponieważ nie zapewniają niczego, czego nie spełnia skrót mieszania.

Zgadzam się z 030 w odniesieniu do:

kto powinien być uprawniony do śledzenia / zwiększania wersji kompilacji

100% jest odpowiedzialna za utrzymanie takich rzeczy przez CI przy właściwej komunikacji między innymi zespołami.


1

Jak upewnić się, że każdy znacznik ma unikalny semantyczny numer wersji dla określonych obrazów?

Można utworzyć znacznik, który składa się z wielu elementów, np. Kombinacji znacznika czasu, skrótu git commit i wersji semantycznej. Te ostatnie należy ustawić ręcznie, a dwa pierwsze można zautomatyzować. Taki tag może wyglądać następująco:

20171015141729-58617f500f7efe236c7ba6a1dfdf37a478b4c878-0.1.4

Ten tag zawiera datę kompilacji, zatwierdzenia i wersję semantyczną. Jeśli obraz dokera uruchomi się podczas produkcji i zostanie wykryty błąd, wówczas znana jest wersja produktu, kod, który jest w środku i kiedy obraz został zbudowany, i w jakich okolicznościach.

Kto powinien być uprawniony do śledzenia / zwiększania wersji kompilacji?

Moim zdaniem powinien to być obowiązek CI, ponieważ jest on w stanie zautomatyzować procesy, a ponieważ tworzenie tagów mogłoby zostać zautomatyzowane, takie narzędzie jest właściwym narzędziem do pracy.


1

Przypuszczam, że używasz jednego z narzędzi DevOps dla CI / CD, takich jak Jenkins, sugeruję następujące podejście,

Jeśli używasz czegoś takiego jak Jenkins-

  • Możesz skonfigurować swoje zadanie w taki sposób, aby można było używać zmiennej środowiskowej Jenkins „BUILD_ID”, która pobiera identyfikator kompilacji zadania po uruchomieniu w celu oznaczenia go na obrazie. W ten sposób możesz kontrolować wersję obrazów dokera. Sprawdź poniższy przykład.

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

Tak więc, jeśli masz mechanizm podobny do znacznika dla SCM, możesz sprawdzić znacznik w odpowiednim identyfikatorze kompilacji w kompilacjach opartych na zadaniu lub w config.xml identyfikatora kompilacji w JENKINS HOME_FOLDER.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.