Was ist ein guter CI-build-Prozess
Was macht ein gutes CI-build-Prozess?
Verwenden wir CI, aber die Bereitstellung für die Produktion auch eine realistische CI Ziel, wenn Sie Abhängigkeiten für mehrere services bereitgestellt werden sollen und zu anderen apps möglicherweise hängen diese auch.
Ist eine gute CI-build-Prozess gut genug, wenn die automatisierte QS und manuell von dort?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sowie "it depends" 🙂
Verwenden wir unser CI-system:
Dies ist für ein greenfield-Projekt von etwa einem Dutzend Dienste und Datenbanken bereitgestellt 20+ Server, das hatte auch Abhängigkeiten auf ein halbes Dutzend andere "externe" Dienstleistungen.
Mithilfe eines CI-Tools bereitstellen, Ihr Produkt in einer Produktionsumgebung als ein realistisches Ziel? mal wieder... "es hängt"
Warum würden Sie wollen, dies zu tun?
Einige technische Dinge, die Sie angehen müssen, bevor Sie können diese Antwort:
Hier sind ein paar der jüngsten weiterführende links zu automation und Aufbau der Werkzeuge, die Sie brauchen.
Wenn es kommt, je komplexer Ihr system, desto schwieriger wird es tun alles automatisieren, aber das bedeutet nicht, es ist nicht ein erstrebenswertes Ziel, es dauert nur eine Menge mehr Anstrengung und Willenskraft, um es getan, also alles, was aus der Kenntnis der Schwierigkeiten, die Sie sich stellen müssen, die Probleme, die Sie haben zu berücksichtigen (Ausfall wird passieren), die politischen Herausforderungen der Gebäude-Infrastruktur (vs. weitere Produkt-features).
Nun hier ist das große Geheimnis... die technischen Herausforderungen sind anspruchsvoll, aber nicht unmöglich... die politischen Herausforderungen unüberwindbar. Alles, was über diese Kosten Geld, ob seine dev Zeit oder Kauf von 3rd-party-Lösungen. Also wirklich, können Sie erstellen Sie die $1K, 10K, $100, oder $1M Lösung?
Welche Lösung auch immer Sie gehen, um sicherzustellen, dass die Automatisierung robusten ersten, komplett den zweiten... also stellen Sie sicher, dass Sie als robuste Lösung, wie Sie für das erste Bereitstellung in einer Testumgebung eher als eine fragile Lösung, setzt für die Produktion.
CI ist nicht gedacht als ein Mechanismus für die Bereitstellung. Es ist gut CI auszuführen, die zu einer automatisierten Bereitstellung eines QS - /Test-server, um sicherzustellen, dass diese Aspekte Ihrer Arbeit bauen, aber ich würde nicht mit einem CI-system wie Tempomat oder Bambus als Mittel der Bereitstellung.
CI ist für den Aufbau der Codebasis regelmäßig, um die automatisierte Ausführung von automatisierten tests, überprüfung der Codebasis über die statische Analyse und andere Prüfungen, die Natur.
Werden Sie sicher, dass Sie verstehen, die Idee hinter einem CI build. CI steht für Continuous Integration und CI-builds sind gewollt Wegwerf-builds, die durchgeführt wird, wenn ein Entwickler prüft code in der source-control-system (oder an eine angegebene Intervall), um sicherzustellen, dass die neuesten änderungen nicht brechen die code-Basis (daher die Idee, kontinuierlich die Integration der änderungen an der code-Basis).
Zu diesem Zweck, die Technologie für die aktuelle build-server-Prozess ist weitgehend irrelevant im Vergleich zu dem, was tatsächlich geschieht, während die bauen. Wie @pdavis erwähnt, der CI-build sollten kompilieren Sie den code, base, führen Sie einige code-Analyse (FxCop, StyleCop, Lint, etc.), Durchführung von unit-tests und code-coverage, und führen Sie eine beliebige andere benutzerdefinierte Analyse, die Sie wollen ausgeführt, dass, sollten Auswirkungen das Konzept einer "erfolgreichen" oder "nicht bestanden" zu bauen.
Dass CI-build-deploy automatisch zu einer Umgebung wirklich fallen nicht unter der Kontrolle von einem build-server. That being said, können Sie immer erstellen Sie ein separates Projekt, das läuft auf dem build-server, der verarbeitet die Bereitstellung, wenn es erkennt bestimmte Bedingungen (wie z.B. ein build abgeschlossen ist erfolgreich), aber das sollte immer getan werden, als eine völlig unabhängige Sache.
Bin ich angefangen an einem neuen Projekt bei der Arbeit, dass ich mich sehr freue. Wir sind noch in der anfänglichen Planungsphase und haben erst vor kurzem abgeschlossen die Logische Systemarchitektur. Wir bestellten neue Server für die Test-und staging-Umgebungen und der Einrichtung eines Continuous Integration (CI) build-system basiert auf Cruise Control (http://cruisecontrol.sourceforge.net/) und MSBuild ( http://msdn2.microsoft.com/en-us/library/wea2sca5.aspx ), das ist im Grunde ein verbesserter port von ANT. Es scheint, dass Visual Studio 2005-Projekt-und solution-Dateien sind jetzt alle im MSBuild-format. Der Tempomat wird automatisch ziehen Sie die Quelle, aus Visual Source Safe (ok, es ist nicht Subversion sondern wir umgehen können), kompilieren Sie es, und dann läuft es durch fxCop (http://www.gotdotnet.com/Team/FxCop/), nUnit (http://www.nunit.org/), nCover (http://ncover.org/site/), und last but not lease Simian (http://www.redhillconsulting.com.au/products/simian/). Cruise Control hat eine ziemlich gute website-Schnittstelle für Anzeige von alle, die erarbeiteten Ergebnisse aus den verschiedenen tools und können auch anzeigen-code ändert sich von einem build zum nächsten. Es verfolgt auch alle builds in eine Geschichte bauen. Ich freue mich auf den test driven development und denke, dass diese Art von Ansatz kombiniert mit nUnit/nCover sollte geben uns eine ziemlich gute Idee, bevor wir roll-out der Veränderungen, die wir habe nicht nichts gebrochen. Es gibt auch Pläne, um eine gewisse Art von automatisierten user interface Tests, sobald wir weit genug entlang in das Projekt. Je nach Werkzeug, das sollte nur eine Frage der Installation des Tools auf dem server zu bauen und den Aufruf von Cruise Control. Süß.
Einen guten CI-Prozesses wird die vollständige oder fast vollständige unit-test-Abdeckung. Unit-tests test-Klassen und-Methoden, - vs. integration tests, die Prüfung mehrere Teile des Systems. Wenn Sie Ihr CI-builds, haben Sie automatisieren von unit-tests. So, die CI-builds ausgeführt werden kann mehrere Male pro Tag. Wir haben uns festgelegt, um ausführen alle 2 Stunden.
Können Sie länger laufen baut, dass Sie einmal pro Tag ausgeführt. Diese können andere Dienste nutzen und führen Integrations-tests.
War ich gerade eine ThoughtWorks Präsentation (Schöpfer von Cruise Control) und Sie sind tatsächlich mit diesem Thema befasst. Ihre Antwort ist, dass KEINE Bereitstellung ist zu Komplex, um Sie zu testen. Warum? Denn sonst werden Ihre Kunden zu Ihren Testern, die ist genau da, wo Sie nicht sein wollen.
Wenn Sie eine komplexe deployment-Struktur, die Einrichtung eines Visualisierungs-server. Haben Sie es vorgeben zu sein, alle die Systeme, die Sie benötigen, zu sprechen. Sie können beginnen Sie immer in einem bekannten guten Zustand, da Sie die Zeit zurücksetzen können, um ein sauberes Bild.
Zur Beantwortung Ihrer ersten Frage, ein guter Prozess ist eine, die ermöglicht die Kommunikation zwischen dem repository und den Entwicklern. Wenn das repository in einem schlechten Zustand (nicht-kompilieren von code, fehlgeschlagene tests, etc.), die Entwickler wissen es so bald wie möglich, so dass Sie es korrigieren können.
Je später ein Fehler entdeckt wird, desto teurer es ist, zu beheben. Also bugs entdeckt werden sollte so früh wie möglich. Dies ist die motivation, die hinter CI.
Einen guten CI sollte sicherstellen Fang so viele bugs wie möglich. Die gesamte Anwendung besteht aus code (oft in verschiedenen Sprachen), Datenbank-schema, - Bereitstellung von Dateien etc.. Fehler in der dazu führen kann, dass Fehler - so die CI sollte versuchen zu trainieren, da viele von Ihnen wie möglich.
CI ersetzt nicht eine ordnungsgemäße QS-Disziplin. Auch CI muss nicht sehr umfassend an Tag eins des Projekts. Man kann beginnen mit einer einfachen CI-Prozess, die grundlegende Zusammenstellung & unit-Tests zunächst. Als Sie entdecken, mehr Klassen von Fehlern in der Qualitätssicherung, sollten Sie Anpassung der CI-Prozess zu versuchen, Sie zu fangen zukünftige vorkommen dieser Fehler. Es können auch die statische code-Analyse überprüft, so dass Sie implementieren einheitliche coding-und design-ideale, die über die Codebasis.
Ich denke, dass eine "manuelle" Bereitstellung wird verwendet, wenn die person, die mit der Bereitstellung engineer Rolle haben die Angst, dass etwas nach einem Einsatz schief gehen kann. Er habe nicht das Vertrauen in deployment-tools Zuverlässigkeit und Stabilität.
Dieses Kunststück kann go Weg mit dem automatisierten deployment-Prozess-Prüfung auf der prod-Umgebung wie.Es hat auch zu testen, wird ein rollback-Mechanismus nach der Bereitstellung.
Wenn diese Funktionen getestet werden genug gewinnen Sie Vertrauen in diesen Prozess und Werkzeug, das Sie verwenden.