Ich versuche, einem Projekt Continuous Integration hinzuzufügen.
Laut Wikipedia besteht ein Hauptbestandteil von CI aus automatisierten Builds. Ich bin jedoch verwirrt darüber, was genau dies bedeutet, da die Artikel zu CI und Build-Automatisierung nicht übereinstimmen.
Konkrete Verwirrungspunkte: Was bedeutet "automatisiertes Erstellen" im Zusammenhang mit:
- Ein Projekt, das eine interpretierte Sprache wie Python oder Perl verwendet?
- Erstellen von der Quelle auf dem Computer eines Endbenutzers?
- eine Anwendung mit Abhängigkeiten, die nicht einfach vorkompiliert und verteilt werden können, z. B. eine Datenbank in einem lokalen RDBMS auf dem Computer des Benutzers?
builds
undbuild
wusste nicht, welchen ich verwenden sollte.Antworten:
Sie haben zu Recht festgestellt, dass für einige Technologien kein Kompilierungsschritt erforderlich ist. Ich empfehle jedoch, den Begriff "Build-Automatisierung" breiter zu fassen. Stellen Sie sich "Build" mit den folgenden zwei Hauptkomponenten vor:
Automatisierung bedeutet dann einfach, dass einige - wenn nicht alle - dieser Vorgänge automatisch ausgeführt werden (das heißt, dass kein manueller Eingriff erforderlich ist). Dies kann abhängig von Ihrer Technologie eine ganze Reihe von Schritten umfassen:
Transformationsschritte:
Qualitätssicherungsschritte:
Heutzutage können Sie mit guten CI-Tools all diese Probleme lösen. Anfänglich sind die meisten Geschäfte daran interessiert, die Kompilierung ihres Codes zu automatisieren, da dies die erste und sichtbarste Ursache für Probleme in der konventionellen Softwareentwicklung ist.
quelle
Ein automatisierter Build ist eine Beschreibung eines Prozesses, der die folgenden Grundlagen abdecken sollte:
5.1 Erfolgreiche Kompilierung, Unit-Test-Erfolg
Es ist ein Hand-off-Prozess, der ohne manuelle Eingriffe ausgeführt werden sollte.
quelle
Für mich ist ein automatisierter Build etwas, das
Das Ziel ist ein Bereitstellungsprozess, der wiederholt werden kann - sprich: getestet -, sodass Sie zu dem Zeitpunkt, an dem Sie die Bereitstellung in der Produktion vornehmen, mit einem gewissen Maß an Sicherheit feststellen können, dass nichts schief geht. Je weniger menschliche Interaktion in den Erstellungs- und Bereitstellungsprozessen stattfindet, desto sicherer ist Ihre Version.
Wenn Sie eine nicht kompilierte Sprache haben, können Sie dennoch eine Site erstellen und diese komprimieren, um ein einzelnes Artefakt zu erstellen.
Mit einem guten CI-Tool können Sie viele Aufgaben in den Erstellungsprozess einbinden, einschließlich der Ausführung von Komponententests. Außerdem werden Ihre erfolgreichen und erfolglosen Builds, die Testabdeckung usw. protokolliert. Aber nichts davon ist Teil dessen, was ich als automatisierten Build definieren würde. (Das heißt, ein guter automatisierter Build-Prozess hat diese Dinge, aber ein schlechter nennt sich nicht umsonst "automatisierter Build", weil ihm diese Dinge fehlen.)
Ich würde vorschlagen, dass Integrations- / Regressionstests als Teil des Bereitstellungsprozesses und nicht als Teil des Erstellungsprozesses ausgeführt werden (auch wenn Sie eine geeignete Umgebung haben, können Sie sie mit jedem Build bereitstellen).
quelle
Bei gedolmetschten Sprachen kann es vorkommen, dass etwas schief geht. Einige interpenetrierte Sprachen haben Compiler, aber in den meisten Fällen ist es nicht unbedingt erforderlich, sie zu verwenden. In diesem Fall würde ich den Code im Allgemeinen nur auf Syntax- und Parsing-Fehler überprüfen, anstatt ihn zu kompilieren, oder direkt zum Ausführen der Tests für den Code übergehen.
Für mich bedeutet dies, dass Sie einen einzigen Befehl bereitstellen können, den Endbenutzer ausführen können, um die neueste Version des Programms abzurufen, es zu kompilieren, zu konfigurieren und nach Bedarf bereitzustellen.
Diese fallen unter den Testteil der kontinuierlichen Integration, da Sie die Datenbanken automatisch zerstören und rekonstruieren können, um sicherzustellen, dass die Skripte korrekt sind und das Programm sie korrekt testet.
quelle
Was Sie in Ihrer Frage besprechen, sind tatsächlich 3 verschiedene Konzepte:
Die kontinuierliche Integration in ihrem Kern besteht darin, kleine Änderungen vorzunehmen und diese Änderungen häufig mit der "globalen Wahrheit" zu synchronisieren. Anstatt einen Checkout durchzuführen und eine Woche zu warten, sollte ein Entwickler an Aufgaben arbeiten, die innerhalb eines Tages erledigt werden können, damit sein Code nicht zu weit vom Haupt-Repository abweicht.
Um dies zu erreichen, ohne seinem Team Schmerzen zu bereiten (dh das Einchecken einer Quelle, die keine bestehende Funktionalität aufbaut oder bricht). Der Entwickler muss sicherstellen, dass sein Code den Build nicht "unterbricht". Wenn dies manuell durchgeführt wird, erhöht sich der zusätzliche Aufwand für den Entwicklungsprozess (stellen Sie sich ein Projekt vor, dessen Erstellung lange dauert und / oder das viele Abhängigkeiten aufweist, bei denen eine Änderung an einer Codezeile die Anwendung auf unerwartete Weise beeinflussen kann).
Um diese Situation zu entschärfen, verwenden wir andere Techniken, um diesen Overhead zu beseitigen.
Wir verwenden automatisierte Builds, um die Quelle auszuchecken und zu erstellen. Optional führen wir automatisierte Tests durch , um zu überprüfen, ob die Anwendung ordnungsgemäß funktioniert (dieser Schritt ist nur so nützlich wie die Testsuite).
Ein weiterer Schritt kontinuierliche Abgabe richtet sich Ihr Problem mit Datenbank und andere Sorgen. Die Idee dabei ist, eine gewisse Versionierungsstufe für die Datenbank und andere Faktoren der Umgebung bereitzustellen, damit wir so schnell wie möglich bestätigen können, dass die Anwendung in einer Umgebung arbeitet, die so produktionsnah wie möglich ist .
quelle
"Automatische Erstellung" bedeutet, dass Sie mit einer (planbaren) Aktion (normalerweise einem Shell-Skript oder einer Batch-Datei) von der Quellcodeverwaltung zu einem versandfähigen Paket wechseln können.
Was genau ein Build ist, hängt in diesem Zusammenhang stark davon ab, was genau Sie versenden, wie es geliefert wird und welche Schritte für die verschiedenen Teile Ihres Entwicklungsstacks erforderlich sind. In jedem Fall beginnen Sie mit Was ist in der Quellcodeverwaltung, und Sie erhalten ein versandfähiges Produkt (oder eine Fehlermeldung und einen verärgerten Projektmanager).
Bei einem einfachen Python-Projekt besteht ein automatisierter Build möglicherweise nur aus zwei Schritten: Auschecken der Quellen und Kopieren der relevanten Dateien in die richtigen Verzeichnisse. Bei komplexeren Projekten kann es sich um Folgendes handeln:
quelle