Build-Automatisierung vs. Deployment-Automatisierung vs. kontinuierliche Integration

12

Ich möchte effizienter werden und ops-Tools effizient einsetzen.

In diesem Sinne wollte ich mehr über die kontinuierliche Integration erfahren, aber es scheint, dass es viele verschiedene Dinge gibt.

Ich arbeite derzeit mit Jetbrains-Anzügen in meiner Arbeit (IntelliJ, WebStorm ...), daher wollte ich sie weiterhin verwenden und TeamCity verwenden, das ein großartiges Tool mit vielen Plugins für die kontinuierliche Integration zu sein schien.

Mein Problem ist, dass ich nicht weiß, was die Unterschiede sind zwischen:

  • Gebäudeautomation (TeamCity ist diese Art von Software): Ich weiß, dass wir unsere Anwendung mit einem entfernten VCS-Repository erstellen können und es ist großartig, aber was ist das Hauptziel davon? Welche Art von Informationen ist dabei wichtig? Tatsächlich weiß ich bereits, ob meine Software lokal erstellt wird oder nicht, und auch meine Teamkollegen. Also, was ist das Ziel, es ohne den Einsatz von Automatisierung zu nutzen?

  • Automatisierung bereitstellen (TeamCity scheint es nicht einfach zu machen)

  • kontinuierliche Integration (die eine Verbindung der beiden oben zu sein scheint)
  • Continuous Delivery (Was genau ist das? Warum unterscheidet es sich von Continuous Integration?)

Kannst du mir helfen, das ein bisschen besser zu verstehen?

mfrachet
quelle
Es ist Automatisierung, keine Automotion.
Florian Margaine
Es baut auf meiner Maschine auf, ist aber nicht gut genug, da es auf die Drehzahl angewiesen ist, um jedes Mal das Richtige zu tun. Dinge wie neue Abhängigkeiten oder andere Änderungen an Teammitgliedern, die mit Ihren verbunden sind, brechen jetzt einen Test.
Andy

Antworten:

15

Wikipedia bietet ziemlich gute Zusammenfassungen der meisten dieser Begriffe. Hier ist meine Sicht auf sie:

  • Die Build-Automatisierung automatisiert die Erstellung der Software, anstatt den Compiler manuell aufzurufen. Dies würde über Tools wie zB Make oder Ant erfolgen .

  • Bei der Bereitstellungsautomatisierung wird die erstellte Software auf einem Test- oder Produktionssystem bereitgestellt oder installiert.

  • Kontinuierliche Integration bedeutet, dass Ihre Software durch einen automatisierten Prozess kontinuierlich erstellt wird, während Entwickler Code einchecken und Komponententests durchführen, um sicherzustellen, dass der Code weiterhin funktioniert. Beispielsweise kann ein Server alle 15 bis 30 Minuten aktiviert werden, das VCS nach neuen Eincheckvorgängen durchsuchen und dann das Projekt aktualisieren und erstellen, wenn Änderungen vorgenommen wurden. Neben der Durchführung von Kompilierungsschritten ist dies auch eine hervorragende Gelegenheit, automatisierte Komponententests und Codequalitätsprüfungen durchzuführen .

  • Continuous Delivery ist eine Kombination aller vorherigen Konzepte, bei denen die Software-Builds auch auf einem Testsystem bereitgestellt werden, optional mit durchgeführten Tests und generierten Berichten.

Zumindest benötigen Sie eine Build-Automatisierung, dh eine Art Build-Skript. Auf diese Weise können Sie auf eine Schaltfläche klicken oder einen Befehl eingeben, um Ihr Projekt zu erstellen. Dies hat den Vorteil, dass Fehler durch manuell ausgeführte Schritte reduziert werden. In komplexen Build-Umgebungen müssen Sie möglicherweise Code generieren ( z. B. DAOs aus Configs, Schnittstellencode wie JAXB ), Code kompilieren, komprimieren, Metadaten anpassen usw. Bei vielen Aufgaben benötigen Sie eine Checkliste Ihr Build-Skript und verwenden Sie ein Tool, um es auszuführen? Es reduziert Fehler und sorgt für Konsistenz.

Als nächstes kommt CI: Das ist wirklich gut zu haben, aber nicht unbedingt erforderlich. Es hilft, Build-Probleme frühzeitig zu erkennen. Wenn mehrere Entwickler den ganzen Tag Code einchecken und möglicherweise ihre eigenen Arbeitsbereiche nicht ständig synchronisieren, besteht das Risiko, dass sich ihre Änderungen gegenseitig beeinträchtigen. Ich beziehe mich speziell auf statische Codefehler und nicht auf Versionskontrollkonflikte. Ein CI-Build-Server verringert dieses Risiko.

Schließlich haben wir die Bereitstellungsschritte. Die Idee dabei ist, Zeit zu sparen und Fehler durch manuelles Bereitstellen von Software zu reduzieren. Ähnlich wie bei der Build-Automatisierung gibt es hundert Möglichkeiten, eine Softwarebereitstellung zu vermasseln. Ich bin persönlich lange im Büro geblieben, um Probleme bei der manuellen Bereitstellung zu beheben, wenn wir ein funktionierendes System für Kunden benötigen, die morgen vor Ort sind. Die Automatisierung mehrerer Systeme birgt ein höheres Risiko: Anstatt dass ein System abstürzt oder seltsame Fehler aufweist, gibt es jetzt mehrereSysteme, die schief gehen können. Dieses Risiko ist jedoch weitaus geringer, als wenn jemand einen Schritt auf einer Checkliste verpasst oder einen falschen Befehl ausgibt und eine Bereitstellung durcheinander bringt. Wenn Sie Glück haben, können Sie einfach eine DB-Sicherung wiederherstellen und von vorne beginnen. Wenn Sie Pech haben, kann ein Fehler dazu führen, dass das System nicht richtig funktioniert. Ist es ein Softwaredefekt? Hat der Techniker eine Konfiguration nicht korrekt vorgenommen? Dies erfordert Zeit für die Diagnose, Zeit, die Sie möglicherweise nicht haben, und Zeit, die Sie nicht aufwenden müssen, wenn Sie den Prozess automatisieren.


quelle
Können wir also zugeben, dass ein Tool wie TeamCity, mit dem etwas von einem entfernten VCS erstellt werden kann, als CI-Server betrachtet werden kann? Möchten Sie Entwicklercodes aus den VCS-Zweigen zusammenführen und die letzte Version aus dem Gebäudeautomationstool erstellen?
mfrachet
1
Ich kenne TeamCity nicht, aber es scheint sich um einen CI-Server zu handeln . Die meiste Erfahrung habe ich mit Jenkins CI gemacht , einschließlich automatisierter Bereitstellungen.
@Skahrz Wenn Sie automatisierte Bereitstellungen wünschen, stehen Ihnen Optionen wie BuildMaster (auch ein CI-Server) und Octopus Deploy zur Verfügung.
Andy
Sie beschreiben Continuous Builds anstelle von Continuous Integration. Letztere müssen auch überprüft werden, ob die Dinge tatsächlich funktionieren, wenn sie zusammengesetzt werden.
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen du hast recht, danke. Ich habe meine Antwort aktualisiert, um das Testen mit CI zu erwähnen.
0
  • Continuous Integration ist die Praxis, alle Entwickleränderungen mehrmals täglich in einer gemeinsamen Hauptzeile zusammenzuführen. Diese Praxis ist mittlerweile so allgegenwärtig, dass es nicht unbedingt so aussieht, als würden Teams traditionell wochen- oder sogar monatelang isoliert an Software arbeiten. Das Ergebnis war "Integration Hell", als getrennte Arbeitsströme zusammengeführt wurden. Continuous Integration wird normalerweise bei automatisierten Builds der gemeinsam genutzten Hauptlinie verwendet, um Probleme frühzeitig zu erkennen. Es geht jedoch eher um häufige Commits und Entwicklerworkflows als um Entwickler.

  • Automatisierte Builds sind nützlich, um Probleme zu beheben, die dazu führen können, dass der Build lokal übergeben wird, jedoch auf dem Build-Server fehlschlägt (z. B. Sie haben vergessen, eine Datei einzuchecken, die Abhängigkeiten vom Build-Server stimmen nicht überein). Wenn der Build-Server diese Probleme erkennt, können Sie sie beheben, bevor es Ihre Teamkollegen tun.

  • Continuous Delivery umfasst das kontinuierliche Bereitstellen, Ausführen und Testen Ihrer Software. Während automatisierte Builds sicherstellen, dass Ihre Software tatsächlich erstellt wird (und die Komponententests bestanden werden), bedeutet dies nicht, dass Ihre Bereitstellungsskripts weiterhin funktionieren oder dass Ihre Software tatsächlich End-to-End ausgeführt wird. Das Ziel von Continuous Delivery ist eine Reihe von Überprüfungen, die sicherstellen, dass die Hauptlinie in einem Zustand bleibt, der für den Einsatz in der Produktion geeignet ist.

  • Continuous Deployment ist der nächste logische Schritt: Jedes Commit, das die Continuous Delivery-Pipeline erfolgreich durchläuft, wird automatisch bereitgestellt. Diese Vorgehensweise hat mehrere Vorteile, aber für mich ist die Hauptidee hier, dass kleine, häufige Commits weniger riskant sind.

Ich empfehle, dieses Buch zu lesen, um weitere Informationen zu erhalten:

Justin
quelle
-2

Teamcity ist wie viele der Build-Tools nur eine zentrale App, mit der Sie viele verschiedene Aufgaben ausführen können. Dies umfasst die Durchführung von Builds wie CI-Builds und Full Release-Builds sowie die Durchführung von Bereitstellungen. Wenn Sie teamcity verwenden, um ant aufzurufen, oder nant, um msbuild für eine Lösungsdatei auszuführen, können Sie auch nant-Skripts aufrufen, die Bereitstellungen ausführen. Es kann ein wenig Skripting erfordern, aber es ist nicht zu schwierig.

Wir verwenden teamcity und bamboo für vollständige CIs, Datenbank-CIs und Implementierungen in der INTegration-Umgebung. Anschließend verwenden wir teamcity für die Erstellung vollständiger Releases und die automatische Erstellung von DB-Migrationsskripten. Diese werden in SVN über Teamcity-Jobs eingecheckt, die an keine Skripte gerichtet sind. Bei den Bereitstellungen verwenden wir Teamcity, um Nants zur Ausführung von Bereitstellungsaufgaben zu rufen. Dies funktioniert gut, da der teamcity-Agent mit dem teamcity-Server kommuniziert und der Agent auf einem der Server an einem DMZ-Standort vorhanden sein kann, wodurch der Code über Firewalls usw. hinaus verschoben werden kann. Sie müssen also nur teamcity oder bamboo verwenden, um das gesamte Szenario zu bewältigen .

Lance Lyons
quelle
2
dies scheint nicht zu bieten alles wesentliche über gemacht Punkte und erklärte in früheren Antwort
gnat