Retrospektive " Force stable trunk"
Hallo, vor rund zwei Jahre hatte ich hier die Frage gestellt, wie man einen stabilen git Trunk erzwingen kann: https://mail.python.org/pipermail/python-de/2013q3/003173.html Viel Zeit ist seit dem vergangen und ich würde gerne die Ergebnisse hier vorstellen. Wir nutzen Jenkins als CI (Continous Integration) Zentrale. Das ist nicht perfekt, aber funktioniert ganz gut und man at eine ganz nette Web-Oberfläche. Die Frage ist eigentlich: Was ist 'stabil'? Wir verwenden den Begriff "Projekt" wie im Django-Umfeld: Ein Projekt besteht eigentlich hauptsächlich aus Konfiguration. Der eigentliche Code ist in Bibliotheken (oder auch App, Lib genannt) Zwischen Projekt und Bibliotheken besteht eine 1:N Beziehung. Das git Repo des Projekts ist also recht klein. Hier ist die Konfig. Bei Django ist das zB settings.py. Es enthält möglichst wenige Conditions (if-Abfragen) oder Schleifen. Ob nun eine Bibliotheken stabil ist oder nicht, ist das eine. Das andere ist ob das Projekt mit den Bibliotheken zurechtkommt. Es kann durchaus sein, dass ein Projekt nur stabile Bibliotheken verwendet, aber das Ergebnis trotzdem nicht stabil ist. Wichtig für uns ist darum das Gesamtergebnis, also das Projekt zu testen. Und wenn alle Tests ok sind, dann werden die Versionsnummer der verwendeten Bibliotheken hochgezählt. Ein von Jenkins angeschobenes Script aktualisiert den Release-Branch im Projekt. Bis zum Update des Produktivsystem geht es dann in vier Stufen: - Entwickler testen bei sich. Der Entwickler muss vor dem commit/merge nicht zwingend alle Tests ausführen. Das dauert zu lange. - CI Alle Tests werden auf Projektebene ausgeführt. Enthält keine Daten aus dem Produktivsystem - Test auf einem Integrationssystem. Hier wird auf einer Kopie dies Produktivsystems gearbeitet. - Produktivsystem Das Produktivsystem wird aktualisiert, wenn die vorhergehenden Stufen ok sind. Warum ich das hier schreibe? Ich will mich damit für die Hinweise bedanken, dich ich hier auf der Liste erhalten habe. Sie haben geholfen die aktuellen Weg zu finden. Und der funktioniert eigentlich ganz gut. Gruß, Thomas -- Thomas Guettler http://www.thomas-guettler.de/
Hallo Python-DE, was denkt ihr über das vorgestellte Vorgehen? Seht ihr Verbesserungsmöglichkeiten? Wie geht macht ihr Continous Integration? Gruß, Thomas Am 11.06.2015 um 10:41 schrieb Thomas Güttler:
Hallo,
vor rund zwei Jahre hatte ich hier die Frage gestellt, wie man einen stabilen git Trunk erzwingen kann:
https://mail.python.org/pipermail/python-de/2013q3/003173.html
Viel Zeit ist seit dem vergangen und ich würde gerne die Ergebnisse hier vorstellen.
Wir nutzen Jenkins als CI (Continous Integration) Zentrale. Das ist nicht perfekt, aber funktioniert ganz gut und man at eine ganz nette Web-Oberfläche.
Die Frage ist eigentlich: Was ist 'stabil'?
Wir verwenden den Begriff "Projekt" wie im Django-Umfeld: Ein Projekt besteht eigentlich hauptsächlich aus Konfiguration.
Der eigentliche Code ist in Bibliotheken (oder auch App, Lib genannt)
Zwischen Projekt und Bibliotheken besteht eine 1:N Beziehung.
Das git Repo des Projekts ist also recht klein. Hier ist die Konfig. Bei Django ist das zB settings.py.
Es enthält möglichst wenige Conditions (if-Abfragen) oder Schleifen.
Ob nun eine Bibliotheken stabil ist oder nicht, ist das eine.
Das andere ist ob das Projekt mit den Bibliotheken zurechtkommt.
Es kann durchaus sein, dass ein Projekt nur stabile Bibliotheken verwendet, aber das Ergebnis trotzdem nicht stabil ist.
Wichtig für uns ist darum das Gesamtergebnis, also das Projekt zu testen. Und wenn alle Tests ok sind, dann werden die Versionsnummer der verwendeten Bibliotheken hochgezählt. Ein von Jenkins angeschobenes Script aktualisiert den Release-Branch im Projekt.
Bis zum Update des Produktivsystem geht es dann in vier Stufen:
- Entwickler testen bei sich. Der Entwickler muss vor dem commit/merge nicht zwingend alle Tests ausführen. Das dauert zu lange.
- CI Alle Tests werden auf Projektebene ausgeführt. Enthält keine Daten aus dem Produktivsystem
- Test auf einem Integrationssystem. Hier wird auf einer Kopie dies Produktivsystems gearbeitet.
- Produktivsystem
Das Produktivsystem wird aktualisiert, wenn die vorhergehenden Stufen ok sind.
Warum ich das hier schreibe?
Ich will mich damit für die Hinweise bedanken, dich ich hier auf der Liste erhalten habe. Sie haben geholfen die aktuellen Weg zu finden. Und der funktioniert eigentlich ganz gut.
Gruß, Thomas
-- Thomas Guettler http://www.thomas-guettler.de/
Am 18.06.2015 um 10:01 schrieb Thomas Güttler:
Wie geht macht ihr Continous Integration?
Ich mach es mit bequem und nutzte github + Travis-CI... Ich denke einfacher kann man es nicht haben. So sieht man auch ob pull requests ok sind. -- Mfg. Jens Diemer ---- http://www.jensdiemer.de
participants (2)
-
Jens -
Thomas Güttler