[Python-de] Continuous Integration: N git Repositories

Thomas Güttler guettliml at thomas-guettler.de
Mi Apr 20 09:50:47 EDT 2016



Am 19.04.2016 um 20:08 schrieb Arnold Krille:
> Hi,
>
> ich hab zwar in Deiner Mail keine wirkliche Frage gelesen, will aber
> trotzdem mal antworten.

Ja, Arnold, richtig gesehen. Ich hatte gar keine Frage gestellt. Ich wollte
als Einführung kurz die Begriffe klären.

Wie Sven geschrieben hat (wir arbeiten zusammen) funktioniert das auch schon
bei uns.

Alles prima? Nein. Es ist zum Heulen, dass das in jeder Firma immer wieder
erneut erfunden und erneut implementiert wird.

Ich hätte gerne ein paar Verbesserungen an dem Setup. Aber es ist im Moment
schon eine Bastellösung.

Ich bin kein Freund von komplexer Konfig in Jenkins. Kommt eine neue Firma
dazu, was dann? Eine Web-GUI ist ja ganz nett, aber copy+paste von Jenkins-Konfig
ist ähnlich wie copy+paste von Quelltext. Das kann man machen, aber langfristig
wird es Kuddelmuddel.

Was ist an dem CI eines Projekts (Definition des Begriffs siehe erste Mail) anders als
am CI einer Bibliothek?

Ein Projekt ist eigentlich nicht viel. Etwas Konfig und eine Liste von Abhängigkeiten.

Ich stelle mir das so vor: Im CI des Projekts werden alle Abhängigkeiten
auf den aktuellsten Stand gebracht. Wenn dann die Tests alle erfolgreich sind,
dann wird der aktuelle Stand der Abhängigkeiten festgezurrt und als stabil
gekennzeichnet.

Und dafür kenne ich im Moment kein Tool.

Bei uns gibt es rund 5 Repos bei denen es täglich Änderungen gibt und rund 30 Repos
mit wenig Änderungen.

Wir leben das sehr agil: Alles Repos, die von uns sind, werden ständig mit dem neusten
Stand integriert.

Eine andere Lösung wäre es immer nur das zu integrieren, was man explizit hoch-zieht.
... Ja, das könnte man machen. Das nervt aber tierisch ständig für N Firmen die
Abhängigkeiten zu aktualisieren.

Jetzt zum Anliegen: Ich würde gerne unsere "Bastellösung" durch ein gängiges Verfahren ersetzen.

Was soll gemacht werden?

CI eines Projekts

1. Nehme den letzten Stand des Projekts, bei dem alle Tests erfolgreich waren.
2. Aktualisiere in der Abhängigkeitsliste alle Pakete. Es sollte jedoch möglich sein einzelne Pakete auf eine Version zu 
"pinnen".
3. Setzte eine Testinstallation des Projekts auf - also mit dem aktualisierten Paketliste.
4. Führe alle Tests aller Pakete aus.
5. Falls alles ok, dann diesen Stand als stabil markieren und die konkrete Paketliste festhalten.

... Unittests sind eben so beliebt weil alles so einfach ist (es wird eine kleine klar definierte "Welt" getestet).
Integrationstests sind eine ganz andere Sache ...

Gruß,
   Thomas





-- 
Thomas Guettler http://www.thomas-guettler.de/


Mehr Informationen über die Mailingliste python-de