Path: csiph.com!news.freedyn.net!news1.tnib.de!feed.news.tnib.de!news.tnib.de!fu-berlin.de!uni-berlin.de!not-for-mail From: "Martin A. Brown" Newsgroups: de.comp.lang.python Subject: Re: [Python-de] Continuous Integration: N git Repositories Date: Wed, 20 Apr 2016 09:20:08 -0700 Lines: 168 Message-ID: References: <5716377E.6040007@thomas-guettler.de> <20160419200816.294685fd@xingu.arnoldarts.de> <57178937.1050900@thomas-guettler.de> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 8BIT X-Trace: news.uni-berlin.de 49eRD+yrngfkT/qBUMwY4Aqhq3IyURt62EeZCTiMKi1A== Return-Path: X-Original-To: python-de@python.org Delivered-To: python-de@mail.python.org X-X-Sender: mabrown@macron.wonderfrog.net In-Reply-To: <57178937.1050900@thomas-guettler.de> X-Content-Filtered-By: Mailman/MimeDel 2.1.22 X-BeenThere: python-de@python.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: Die Deutsche Python Mailingliste List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: X-Mailman-Original-References: <5716377E.6040007@thomas-guettler.de> <20160419200816.294685fd@xingu.arnoldarts.de> <57178937.1050900@thomas-guettler.de> Xref: csiph.com de.comp.lang.python:4418 Hallo, >> 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. Ich finde Deine Frage die richtige Frage, und ich stimme mit Dir überein: Es ist zum Heulen, dass das in jeder Firma immer wieder erneut erfunden und erneut implementiert wird. (So muß es immer sein, wenn das richtige Gerät fehlt.) Ich schlage einen anderen Weg und Werkzeug vor. Wenigstens, darf man 'Continuous Build' benutzen wenn Linux das Zielplatform ist. (Ich kenne mich mit Windows nicht aus.) Kurz: Hast Du von dem OBS, Open Build Service gehört? Ich empfehle es: http://openbuildservice.org/ > Ich hätte gerne ein paar Verbesserungen an dem Setup. Aber es ist > im Moment schon eine Bastellösung. Wenn man (irgend)eine Software sehr genau anschaut sieht man daß es alles gebasteltes Zeug ist. Wunderschönes gebasteltes Zeug! Aber im Ernst, muß ich zugeben: Eine Bastellösung führt in Richtung Komplexität und Komplexität ist unser Erzfeind hier. > 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. Jeder Konfig neigt stets in die Verwickelung. > 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. Genau. > 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. Es ist wahrscheinlich daß man OBS auf solcher Weise benutzen könnte. > Bei uns gibt es rund 5 Repos bei denen es täglich Änderungen gibt > und rund 30 Repos mit wenig Änderungen. Vor einer Woche habe ich eine Einführung in OBS geschrieben. Meine Absicht war den Anstoß und Hintergrund des OBS zu beschreiben und den Kern des Systems darzustellen. Zweitens wollte ich einen Unterschied zwischen Continuous Integration und Continuous Build erklären. http://linux-ip.net/continuous-build-with-the-open-build-service.html (Leider ist diese nur auf Englisch geschrieben.) Und, jetzt, weiter auf Deine Frage. Die Idee daß Du vorgeschlagen hast, Thomas, scheint mir ganz nah an den Stärken des OBS. Jetzt versuche ich zu beschrieben wie ich dieses Problem mit OBS lösen würde. Ausgangspunkt: 5 Kunden, jeder hat seine eigene Infrastruktur. 100 Paketen (mehr oder weniger) Entwicklungshaus, einige Mitarbeiter. Jenkins als CI server (jetzt auch mit 'artifacts') Was würde ich tun? OBS hinzufügen. Wenn jedes Stück Software wirklich open source ist und nichts geschützt werden muß, dann startete ich einfach mit dem öffentlichem OBS. * Für jede Kunde, würde ich ein OBS Projekt machen. * Unterstützten Platformmen in 'prjconf' einschalten. z.B. für Kunde A, CentOS-7.1-x86_64, für Kunde B, OpenSUSE-13.2-x86_64 * Ein einziges Paket [0] in das Projekt aufladen und sichern daß das OBS gute RPMs baut * Alle anderen Paketen aufladen und sichern daß alles gut läuft. Wenn die Software proprietär ist, dann kann man das OBS selbst installieren (es gibt auch Appliance und VM). Dieselbe Strategie kann man folgen, aber man muß zuerst das ganze OBS mit den gewünschten Distributions ausstatten. Dann kann man ein Projekt pro Kunde und so weiter machen. Bei einer früheren Firma, haben wir das gemacht. Unsere eigenen 200+ Paketen brauchten ungefähr 350 öffentliche Abhängigkeiten. Wie kommt man zurecht mit so einer Menge von Software? Nur mit Automatisierung. Unsere Lösung: * OBS selbst installieren (ein einziger zweckbestimmter Rechner, und einige zusätzliche fürs Bauen: "workers"). * Mit rsync, die Distribution kopieren lassen (täglich, unter unserer Kontrolle); genannt "upstream distributions" * Ein Projekt für alle andere öffentliche Abhängigkeiten; A) ein Paket wird nicht von 'upstream' geliefert; B) wir brauchten eine neuere Version; bei uns 'third-party' genannt * Ein Projekt machen für jeden Geschäftszweck (in Deiner Lage würde ich Ein Projekt pro Kunde machen) Ich habe zwei zusätzliche Gedanken. Erstens, ist es ganz richtig die gebauten Pakete festhalten zu wollen. Mit dem OBS gibt es einige Mechanismen die hier dienen könnten, aber ich persönlich habe keine Erfahrung damit. Unsere Lösung war ein bißchen komplexer, aber gut für die Entwickler. Wir hatten ein Projekt für alle aktuellen Entwicklungsarbeit. Natürlich war dieses Projekt war oft beim Bauen. Wenn ein Paket (oder eine Gruppe von Paketen) für Veröffentlichung bereit war, kopierten wir diejenigen in ein strenger kontrolliertes Projekt. So könnten wir die endgültige Paketen besser feststellen. Zweitens, kann man OBS mit VCS Quellen benutzen. In OBS Sprache meint man 'source services'. Diese Art von Konfiguration gleicht dem CI System wie Jenkins und Travis. Vielleicht ist diese Antwort nicht genau was Du erwarten hättest, denn diese ist keine Python-spezifische Antwort. Jedenfalls, sehe ich einen Unterschied zwischen continuous integration und continuous build. Ich sehe das erfolgreiche Ablauf von Bauen und Testen in ein CI-System (e.g. Jenkins) als die Endstation von Entwicklung. Anstatt diese 'build artifacts' zu benutzen, würde ich das ganze Bauproblem auf ein continuous build (e.g. OBS) schieben. Hoffentlich ist meine Antwort hilfreich, -Martin [0] In meiner Erfahrung sind die Paketen nicht immer nur Python. Meiner Meinung nach ist es gut, alle Software mit demselben Package Management Tool (apt, dnf, zypper) zu beherrschen. Daher, baue ich mein Python Paketen meistens in RPMs (und nun .debs). z.B.: python setup.py bdist_rpm (Und, Entschuldigungen, wenn ich da oben irgendwo die Beugungen verwechselt habe.) -- Martin A. Brown http://linux-ip.net/