Ich habe kürzlich unsere CI-Server angeschlossen, um Docker-Images nach Git-Commit zu erstellen.
Wir haben ungefähr 8 verschiedene Container, die gebaut werden, jeder mit seiner eigenen Sprache / seinen eigenen Frameworks. Einige sind Knoten und haben eine package.json, andere sind Python-Dienste, die keine semantischen Versionsinformationen enthalten.
Bei meiner Frage geht es nicht darum, wie Tags erstellt werden, sondern darum, die Werte für das Tag zu erstellen.
Wie kann sichergestellt werden, dass jedes Tag eine eindeutige semantische Versionsnummer für die spezifischen Bilder hat? Wer sollte die Autorität beim Verfolgen / Inkrementieren einer Build-Version sein?
docker
continuous-integration
versioning
Jack Murphy
quelle
quelle
Antworten:
Ich würde Sie zu meiner Post- Coupling-Docker-Registrierung und Quellcodeverwaltung weiterleiten, wo dmaze von den offiziellen forums.docker.com geantwortet hat . Das Festschreiben von Hash- und Zweignamen oder Tags reicht aus.
Wir verwenden derzeit eine Kombination aus Filialname / Commit-Hash. Für uns scheint das genug zu sein. Zeitstempel, während sie nützlich sind IMO fügen nur Unordnung hinzu, da sie nichts liefern, was der Commit-Hash nicht tut.
Ich stimme 030 in Bezug auf:
Es liegt zu 100% in der Verantwortung des CI, solche Dinge aufrechtzuerhalten und die Kommunikation zwischen anderen Teams zu gewährleisten.
quelle
Man könnte ein Tag erstellen, das aus mehreren Elementen besteht, z. B. einer Kombination aus Zeitstempel, Git-Commit-Hash und semantischer Version. Letzteres muss manuell eingestellt werden, während die ersten beiden automatisiert werden könnten. Ein solches Tag könnte wie folgt aussehen:
Dieses Tag enthält das Erstellungsdatum, das Commit und die semantische Version. Wenn ein Docker-Image in der Produktion ausgeführt wird und ein Fehler gefunden wird, kennt man die Version des Produkts, den Code, der sich darin befindet, und wann das Image erstellt wurde und unter welchen Umständen.
Meiner Meinung nach sollte dies in der Verantwortung des CI liegen, da dies Prozesse automatisieren kann und die Erstellung von Tags automatisiert werden kann. Ein solches Tool ist das richtige Tool für den Job.
quelle
Ich nehme an, dass Sie eines der DevOps-Tools für CI / CD wie Jenkins verwenden. Ich schlage den folgenden Ansatz vor:
Wenn Sie so etwas wie Jenkins-
Ex:-
sudo docker build -t <image_name>:<BUILD_ID>
Wenn Sie also einen tagähnlichen Mechanismus für Ihr SCM haben, können Sie das Tag in der jeweiligen Build-ID entweder in jobbasierten Builds oder in config.xml der Build-ID in JENKINS HOME_FOLDER überprüfen.
quelle