Frage

Was macht einen guten CI Build-Prozess?

Wir verwenden CI, aber Bereitstellung Produktion auch ein realistisches CI Ziel, wenn Sie Abhängigkeiten von mehreren Diensten haben, die auch entfaltet werden sollten und andere Anwendungen können auf diese verlassen.

Dies ist ein guter gut CI Build-Prozess gut genug, wenn sein automatisierte QA und Handbuch von dort?

War es hilfreich?

Lösung

Nun "es kommt":)

Wir nutzen unser CI-System an:

  1. bauen & Unit-Test
  2. einsetzen, um einzelne Feld laufen intergration Tests und Code analisys
  3. bereitstellen, um Laborumgebung
  4. laufen Abnahmen in prod-artiges System
  5. Drop erstellt, die den Ball zu Code Drop für prod Bereitstellung

Dies ist für ein Greenfield-Projekt von etwa einem Dutzend Dienste und zu mehr als 20 Servern bereitgestellt Datenbanken, die auch Abhängigkeiten hatte auf ein halbes Dutzend andere ‚externe‘ Dienste.

Mit Hilfe eines CI-Tool Ihr Produkt in einer Produktionsumgebung als realistisches Ziel zu implementieren? wieder ... "es kommt"

Warum wollen Sie das tun?

  • , wenn Sie den Prozess haben Sie können Änderungen rückgängig (und Rollback) schneller und häufiger
  • weniger Chance für menschliche Fehler
  • können Sie die gleiche Einsatzstrategie in einer Testumgebung testen, bevor früher zur Produktion und Fangfragen gehen

Einige technische Dinge, die Sie angehen müssen, bevor Sie diese beantworten können:

  • , was die Verfügbarkeitsanforderungen für Ihr System ist - Sind Sie Ausfallzeiten haben darf oder muss es bis 24/7 sein
  • ?
  • Sie tun Change Control Prozesse verfügen, die menschliche Intervention / Genehmigung erforderlich?
  • Ihr Einsatz robust genug für jede Komponente auf einen bekannten Zustand rückgängig zu machen, wenn eine Bereitstellung fehlschlägt?
  • Ihr System entwickelt, um verschiedene Versionen von Diensten oder Kunden, falls einer oder mehreren Komponenten-Implementierungen nicht zu behandeln (und Sie haben die oben Rollbacks gut zum letzten bekannt)?
  • hat das Verfahren die smarts einen teilweisen Einsatz zu handhaben, wenn eine Komponente nicht gemischte Versionen ihrer Abhängigkeiten / Kunden umgehen kann?
  • Wie werden Sie verteilen Datenbank deployment / Upgrades?
  • Sie tun Überwachung an der richtigen Stelle, damit Sie wissen, wenn etwas schief geht?

Hier sind ein paar letzten RELATED_LINKS über Automatisierung und Aufbau der Werkzeuge, die Sie benötigen.

Wenn es darauf ankommt, das komplexere System desto schwieriger ist es, alles tun zu automatisieren, aber das bedeutet nicht, es ist kein erstrebenswertes Ziel ist, es dauert nur viel mehr Mühe und Willenskraft es zu tun bekommen - alles von den Schwierigkeiten zu wissen, Sie, die Probleme, die Sie haben zu berücksichtigen (Fehler wird geschehen), die politischen Herausforderungen der Gebäudeinfrastruktur (gegen weitere Produkt-Features).

Gesicht gehen

Jetzt her das große Geheimnis ... die technischen Herausforderungen anspruchsvoll sind, aber nicht unmöglich ... die politische Herausforderungen unüberwindbar sein. Alles rund um das kostet Geld, ob seine dev Zeit oder 3rd-Party-Lösungen zu kaufen. Also wirklich, können Sie das $ 1K, $ 10K, $ 100K oder $ 1M Lösung bauen?

Welche Lösung auch immer Sie gehen für sicherstellen, dass die Automatisierung ist robust ersten, kompletten zweiter ... das heißt sicherzustellen, dass Sie so robust, eine Lösung, wie Sie können für die Bereitstellung einer Testumgebung immer eher als eine fragile Lösung, der Produktion einsetzt.

Andere Tipps

CI ist nicht als Entfaltungsmechanismus vorgesehen. Es ist gut Sie CI jede automatisierte Bereitstellung an einen QA / Test-Server ausführen zu lassen, die Aspekte der Build Arbeit zu gewährleisten, aber ich würde nicht ein CI-System wie Cruise Control oder Bambus als Mittel verwenden Einsatz.

CI ist die Code-Basis für den Aufbau periodisch Durchführung von automatisierten Tests zu automatisieren, die Überprüfung der Code-Basis über die statische Analyse und andere Kontrollen dieser Art.

Seien Sie sicher, dass Sie die Idee hinter einem CI bauen verstehen. CI steht für Continuous Integration und CI sollen Builds wirklich Wegwerf werden erstellt, die ausgeführt werden, wenn ein Code-Entwickler überprüft in das Quellcodeverwaltungssystem (oder in einem bestimmten Intervall), um sicherzustellen, dass die neuesten Änderungen der Code-Basis nicht brechen (daher die Idee der kontinuierlich die Änderungen an der Codebasis zu integrieren).

Zu diesem Zweck ist die Technologie für den aktuellen Build-Server-Prozess verwendet wird, ist weitgehend irrelevant im Vergleich zu dem, was während des Build tatsächlich passiert. Wie @pdavis erwähnt, sollte die CI Build die Code-Basis kompilieren, führen Sie einige Code-Analyse (FxCop, StyleCop, Lint, etc.), Unit-Tests und Code-Coverage ausführen, und führen Sie eine andere benutzerdefinierte Analyse der durchgeführten wollen, dass das Konzept auswirken sollte ein „erfolgreich“ oder „nicht bestanden“ zu bauen.

Mit automatisch einer CI-Build eine Umgebung bereitstellen, wirklich unter der Kontrolle eines Build-Server nicht herunterfällt. Davon abgesehen, können Sie immer ein eigenes Projekt erstellen, die auf dem Build-Server ausgeführt wird, die die Bereitstellung behandelt, wenn sie bestimmte Bedingungen erkennt (wie ein Build abgeschlossen successfuly), aber das sollte immer als völlig unabhängig, was getan werden.

Ich beginne ein neues Projekt bei der Arbeit, die ich wirklich freue mich auf. Wir sind immer noch in dem ersten Entwicklungsschritt und haben gerade kürzlich die logische Systemarchitektur. Wir haben für die Test- und Staging-Umgebungen neuen Server bestellt und eine Continuous Integration (CI) baut Einrichtung des System basierend auf Cruise Control ( http://cruisecontrol.sourceforge.net/ ) und MSBuild ( http://msdn2.microsoft.com/en-us/library/wea2sca5.aspx ), die im Grunde ein verbesserter Hafen ANT ist. Es scheint, dass Visual Studio 2005-Projekt und Lösungsdateien alle jetzt in MSBuild-Format sind. Cruise Control automatisch die Quelle von Visual Source Safe ziehen werden (ok, es ist Subversion nicht, aber wir können umgehen), Kompilieren, und es durch FXCop dann (Lauf http://www.gotdotnet.com/Team/FxCop/ ), nUnit ( http://www.nunit.org/ ), NCover ( http : //ncover.org/site/ ), und last but not leasen Simian ( http://www.redhillconsulting.com.au/products/simian/ ). Cruise Control hat eine ziemlich gute Website-Schnittstelle für alle die erarbeiteten Ergebnisse aus den verschiedenen Tools Anzeige und können sogar Änderungen am Code von einem Build auf die nächste angezeigt werden soll. Es hält auch den Überblick über alle in einem Build Geschichte aufbauen. Ich freue mich auf den Test Driven Development und denken, dass diese Art von Ansatz mit nUnit kombiniert / NCover uns eine ziemlich gute Vorstellung geben sollte, bevor wir Änderungen ausrollen, dass wir nichts gebrochen haben. Darüber hinaus gibt es Pläne, irgendeine Art von automatisierten Benutzeroberfläche Tests zu übernehmen, wenn wir weit genug in dem Projekt sind. Je nach Werkzeug sollte dies nur eine Frage des das Werkzeug auf dem Build-Server installieren und von Cruise Control aufrufen. Süße.

Ein guter CI Prozess wird voll oder fast voll Einheit Testabdeckung. Unit-Tests Testklassen und Methoden, gegen Integrationstests, die mehrere Teile des Systems testen. Wenn Sie Ihr CI baut einrichten, haben sie die Unit-Tests automatisieren. Auf diese Weise baut die CI mehrere Male pro Tag ausgeführt werden kann. Wir haben uns setzen alle 2 Stunden ausgeführt werden.

können Sie haben längerer Lauf dass Lauf einmal pro Tag erstellt. Diese können andere Dienste nutzen und Integrationstests ausgeführt werden.

Ich war eine Thought Präsentation (Schöpfer von Cruise Control) zu beobachten und sie adressierte tatsächlich dieses Problem. Die Antwort ist, dass kein Einsatz zu komplex ist, zu testen. Warum? Denn sonst, werden Ihre Kunden Ihre Tester, was genau das ist, wo Sie wollen nicht sein.

Wenn Sie eine komplexe Bereitstellungsstruktur haben, stellen Sie einen Visualisierungsserver auf. Haben sie so tun, als alle Systeme Sie sprechen sein müssen. Sie können immer in einem bekannten guten Zustand starten, weil Sie auf ein sauberes Bild zurücksetzen.

Um Ihre erste Frage, ein guter Prozess zu beantworten ist eine, die die Kommunikation zwischen dem Repository und den Entwicklern ermöglicht. Wenn das Repository in einem schlechten Zustand ist (nicht-Kompilierung-Code, nicht bestandene Tests, etc.), die Entwickler wissen es so schnell wie möglich, so dass sie es korrigieren können.

Je später ein Fehler entdeckt wird, ist die aufwendigere es zu beheben. So Bugs sollte so früh wie möglich zu entdecken. Dies ist die Motivation hinter CI.

Ein gutes CI sollte dafür sorgen, so viele Fehler wie möglich zu kontrollieren. Die gesamte Anwendung besteht aus Code (häufig in mehreren Sprachen), Datenbankschema, Bereitstellungsdateien usw. Fehler in einer dieser Punkte kann Fehler verursachen -. So sollte die CI versuchen, so viele von ihnen wie möglich zu trainieren

CI keine geeignete QA Disziplin ersetzen. Auch zu seien CI braucht nicht sehr umfangreich am ersten Tag des Projektes. Man kann mit einem einfachen CI-Prozess startet, tut grundlegende Zusammenstellung und Unit-Tests zunächst. Wie Sie mehr Klassen von Fehlern in QA entdecken, sollten Sie den CI-Prozess anpassen, um zu versuchen zukünftige Ereignisse dieser Fehler zu fangen. Es kann auch statische Code-Analyse überprüft beinhalten, so dass Sie konsistente Codierung und Design Ideale über die Code-Basis umsetzen können.

  
    

Dies ist ein guter gut CI Build-Prozess gut genug, wenn sein automatisierte QA und Handbuch von dort?

  

Ich denke, dass „manuelle“ Bereitstellung verwendet wird, wenn Person mit Deployment-Ingenieure Rolle Angst hat, dass etwas nach dem Einsatz schief gehen kann. Er habe nicht das Vertrauen in die Bereitstellungstools Zuverlässigkeit und Stabilität.

Dieses Kunststück mit automatisierter Deployment-Prozess Prüfung auf prod artigen environment.It weggehen auch einen Rollback-Mechanismus nach dem Einsatz testen hat.

Wenn diese Funktionen getestet werden genug gewinnen Sie ein Vertrauen in diesem Prozess und Werkzeug, das Sie verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top