2009-07-20 15 views
7

Ich baue einen CI-Server und würde es wirklich schätzen, echte Erfahrungen zu sammeln, und einen Überblick darüber, was die Leute benutzen.Wie funktioniert Ihre kontinuierliche Integration?

Also, was sind Ihre Build-Prozesse? Gibt es so etwas wie:

  • eine stündliche für Code und Tests,
  • andere täglich für Build msi und Code-Metriken,
  • etc.

und auch, was macht Ihre vollständige Build Prozess verwenden? Haben Sie verwenden so etwas wie:

  • Team Stadt,
  • msbuild,
  • nunit - für Tests,
  • NCover - für die Testabdeckung,
  • NDepend - für Code-Metriken,
  • Sandburg - für die Dokumentation durch die Code-Kommentare,
  • testcomplete - für QA-Tests,
  • usw.?

Teilen! ;)

+2

Bitte sehen: http://stackoverflow.com/questions/102902/what-is-a-good-ci-build -process – Shog9

+2

@ Shog9: Die Frage, die Sie beziehen, bespricht CI auf einer abstrakteren Ebene (wage ich zu sagen * meta *?), während diese Frage nach spezifischen Implementierungsdetails fragt. Ich denke, sie unterscheiden sich genug, um diese offen zu halten. – Treb

Antwort

3

Wir hatten eine ähnliche Konversation auf der neuesten CITCON Nordamerika (Continuous Integration and Testing Konferenz), wo wir alle unsere Erfahrungen teilten und versuchten, eine Roadmap von einfachen CI bis zu sehr aufgebauten CI- und Release-Systemen zu erstellen.

Die ursprünglichen Konferenznotizen sind here. Zusammen mit einem Flickr photostream. Ein cleaned up version ist auch im Urbancode Blog verfügbar.

Die Aussies revisited das Thema bei CitCon Brisbane und ein pencast davon ist verfügbar

Hoffnung einige dieser Ressourcen nützlich sind.

2

Für Java, haben wir eine Instanz von Hudson für Commits im SVN Repository überprüft, für jeden begehen ein Build, in dem alles kompiliert und alle Testgeräte verwenden Maven2 laufen. Auch der Hudson ist mit einer Instanz von Sonar verbunden, die uns Statistiken über den Codierungsstil und die Testabdeckung geben.

Sonar screenshot http://nemo.sonarsource.org/charts/trends/60175?sids=1024412,1025601,1026859,1073764,1348107,2255284&metrics=complexity,mandatory%5Fviolations%5Fdensity,lines,coverage&format=png&ts=1244661473034

Süß :)

+0

Kennen Sie ungefähr die Anzahl der Commits pro Tag? – Treb

0

In meinem Fall (ein in-house entwickelt/Einbau/unterstützt CB-System), verpflichtet sich der VCS im Baum durch einen gegebenen CB Config gezielt automatisch eine CB Warteschlange Anfrage (mehrere Anfragen, die während der Ausführung einer CB eingehen, werden in eine zusammengefasst, die ausgeführt wird, sobald der aktuelle CB-Prozess abgeschlossen ist).

Jede CB-Instanz reagiert auf eine CB-Anforderung, indem sie die Build- und Testschritte ausführt (parallel zu einer "Wolke" verteilter Server, die von allen CB-Instanzen gemeinsam genutzt werden) und die Build- und Testergebnisse protokolliert und gelegentlich (nicht öfter als eine konfigurierte Frequenz) starten "schwere Tests" (die sehr lange laufen können und KEINE eingehenden CB-Anfragen blockieren) - schwere Tests werden komplett abgeschrieben, obwohl die Protokolle es sehr genau verdeutlichen gegen welche Build sie laufen).

"Sync to Head" (dieser "Kopf" wäre "Trunk" in anderen VCS ;-), für Abhängigkeiten, die nicht Teil des Baumes sind, der von einem CB erfasst wird, nicht produktionskritische oder experimentelle Builds) oder nur bei sehr expliziten Integrationsanforderungen (das ist das andere Extrem für "release branches" für Builds/Projekte, die produktionskritisch sind) oder mit intermediärer Toleranz.

Nicht die Spitze der Release-Engineering-Praxis, denke ich, aber in seiner Palette von Optionen funktioniert es gut für uns, für eine wirklich große Vielzahl von Projekten von sehr unterschiedlicher Kritikalität, Abhängigkeit-Schwere, & c ;-).

2

Bei meinem vorherigen Projekt hatten wir zwei Server und einen SVN Server.

Erste Lunbuild-Maschine wurde für den Bau des Projekts verwendet - inkrementelle Build + Unit Tests pro Commit und dann sauber Build + Unit Tests + komplette Installation Verpackung während der Nacht.

Die zweite Lunbuild-Maschine wurde als Prüfstand für Integrationstests verwendet. Sobald die erste Maschine die nächtliche Installation fertiggestellt hatte, würde sie diese aufheben, sie auf sich selbst anwenden und die komplette Suite von Integrationstests (junitbasierter Treiber von Swing-GUI) ausführen, sodass jeden Morgen Testingenieure eine Installation zusammen mit bekommen würden ein Bericht über einen Gesundheitscheck, damit sie entscheiden können, ob sie den neuen Build nehmen wollen oder nicht.

2

Wir verwenden CruiseControl.net als unseren CI-Server in Kombination mit nant. Die meisten Builds (wir haben ungefähr 30 Builds) werden bei Änderungen ausgelöst. Einige weniger wichtige schwere Builds werden nur einmal pro Nacht ausgelöst, dies gilt auch für die Wartungs-Builds, die die meisten normalen Builds reinigen.

Für unsere C/C++ - Code-Builds verwenden wir ein proprietäres Build-System, das Code-Builds auf jede im Unternehmen verfügbare Maschine verteilen kann (wie IncrediBuild, aber viel flexibler). Für unsere C# Builds rufen wir direkt devenv.com auf, aber wir verwenden NUnit, um die Komponententests auszuführen. Unsere C++ Komponententests verwenden unser eigenes Framework und führen sie in XML aus, das dem von NUnit sehr ähnlich ist. Für einige zusätzliche Code-Prüfungen führen wir jeden Abend pclint aus. Momentan ist noch keine Code-Abdeckung vorhanden, was schade ist.

Wir verwenden das System auch, um das finale Build unseres Produkts vorzubereiten. Es ist nur der erste Schritt, es bedarf noch einiger manueller Aktionen.

2

Build-Prozesse - Wir haben 4 aktive Zweige einer großen Code-Base, für die wir kontinuierlich Builds ausführen. Für jeden Zweig haben wir Builds die gliedert sich in zwei Phasen:

  • Schnell Continuous Integration Build, der nach jedem so begehen läuft, dass wir Feedback über gebrochene Code bekommen, oder gebrochen Tests so schnell wie möglich
  • Voll automatisiert Build, das jeden Tag zweimal ausgeführt wird und garantiert, dass der Code von Anfang bis Ende neu erstellt wird.

Unser Build-Prozess von Zed Builds And Bugs koordiniert und umfasst Ant, Machen, Maven, JUnit, Findbugs, Shell-Skripten (historical), auf Windows, Linux, AIX, HP und Solaris.

Wir sind gerade dabei, mehr Roll-ups historischer Trends und Statistiken einzubeziehen, damit wir von einer höheren Ebene aus sehen können, wie der Entwicklungsprozess abläuft.

0

Jenkin ist das beste Werkzeug für Continous-Integration (CI). CI ist nichts anderes als die häufige Integration des Codes in Ihr Repository (SCM). Darüber hinaus integrieren SCM in Jenkins für den Aufbau Ihres Codes.

Sie können die Abrufhäufigkeit in jenkins einstellen. Wenn also die Änderungen in SCM vorgenommen und festgelegt werden, wird Jenkins versuchen, einen Build zu erstellen. Dieser Weg funktioniert .. kontinuierliche Integration.

Verwandte Themen