Nun, ich plane, ein kontinuierliches Integrationstool für ein Projekt zu verwenden, und ich bin der einzigartige Entwickler. Die Notwendigkeit kommt da
- Ein Ziel ist es, es plattformübergreifend zu gestalten. Ein Integrationstool hilft Ihnen dabei, Ihre App implizit (grundlegend) auf mehreren Plattformen zu überprüfen, sobald Sie Ihre Änderungen im Integrations-Repository (oder im zentralen Repository oder einem anderen) vorgenommen haben wird als maßgeblich verwendet).
- Das Projekt ist langfristig angelegt, sodass ich später mit einem Team zusammenarbeiten muss. Ich habe nicht vor, bis 2012 jemanden zu rekrutieren, damit die Sache mit der kontinuierlichen Integration auf den Moment warten kann, bis 1. die Priorität wird.
Abgesehen von der plattformübergreifenden Vorbereitung und der Vorbereitung der Teamarbeit sehe ich keine Notwendigkeit. Die Hauptsache ist, eine Art Quellcodeverwaltungssoftware und mehrere Repositorys zu haben, um Backups zu erstellen. Auf diese Weise können Sie bei Bedarf Build-Tools einrichten.
In Bezug auf das Build-Timing verwende ich Mercurial und richte ein Integrations-Repository ein, das nicht das Teamwork-Repository ist. Verschieben Sie also die Änderungen in das Teamwork-Repository, bis ich das Gefühl habe, dass es an der Zeit ist, das Integrationssystem zum Erstellen zu bewegen. Dann schiebe ich vom Teamwork-Repo zum Integrations-Repo und das wird den Build auslösen. Dann füge ich noch ein Skript hinzu, das das Teamwork-Repo einmal täglich in das Integrations-Repo zieht.
Hier gehe ich davon aus, dass ich fast jeden Tag an meinem Projekt arbeite, aber das stimmt nicht immer. Sie müssen ein Build-Timing festlegen, das relativ dazu ist, wie oft Sie Builds benötigen. In einer Spielefirma, bei der ich zuvor gearbeitet habe, haben wir CruiseControle verwendet und jede Stunde einen vollständigen Build erstellt. Wir könnten bei Bedarf auch einen Build erzwingen, wann immer wir wollten.
Für ein Heimprojekt kann eine Zeit pro Tag bereits "oft" sein. Die Hauptanforderung wäre, es dem Benutzer zu ermöglichen, das Starten eines Builds zu erzwingen.
Wenn ich der einzige bin, der sich verpflichtet, baue und teste ich nur, bevor ich mich tatsächlich verpflichtet habe. Normalerweise benutze ich ein Makefile-Target wie:
Das konfiguriert, erstellt, führt alle Tests aus (Valgrind-fähig), führt Lints aus usw. Da ich weiß, dass ich der einzige bin, der pusht, brauche ich nicht wirklich die Kraft von etwas wie Hudson.
Wenn in einer Umgebung, in der mehrere Zweige ein Hauptrepository versorgen, jeder dem Pull folgt, bevor Sie einen Commit oder Push ausführen, ist der CI-Server möglicherweise etwas überlastet. Eine gut geschriebene Regel, die besagt, dass der Autor, der den letzten Build gebrochen hat, am Freitag Pizza kauft, sorgt normalerweise für einen reibungslosen Ablauf :)
Wenn ein Projekt klar in Teilsysteme mit eigenen Leitern unterteilt ist, müssen Sie sich wirklich überlegen, etwas wie Hudson zu verwenden. Jemand könnte vor Ort testen, ein Rennen mit einem anderen Subsystem verlieren und am Ende etwas Giftiges herausfordern.
Wenn Sie ein sich schnell bewegendes Projekt verwalten (z. B. Ihre eigenen Patches für den Linux-Kernel), sollten Sie in Betracht ziehen, so etwas wie Hudson zu verwenden, auch wenn Sie in diesem Projekt "solo" sind. Dies gilt insbesondere dann, wenn Sie direkt von der Hauptleitung aus verzweigen / neu starten.
quelle
make: don't know how to make sense. Stop
. Argh!Ich würde nicht sagen, dass dies nur ein netter Bonus ist. Ich würde sagen, dass es für uns Solokünstler von entscheidender Bedeutung ist, qualitativ hochwertige Software zu entwickeln. Die meisten von uns lassen ihre Qualitätsstandards ein wenig nach, wenn sie glauben, es sei einfach genug, sie später zu beheben. Wenn Sie Software in diesem Status festschreiben, haben Sie im Wesentlichen eine wertlose Codebasis in Ihrer Quellcodeverwaltung gespeichert.
Bei richtiger Einhaltung (dh Sie überspringen die Tests nicht und stellen sicher, dass sie bei jedem Commit erstellt werden), werden Sie von CI gezwungen, einen höheren Qualitätsstandard einzuhalten, als Sie dies bei einem Commit tun würden.
quelle
Es ist wichtig, dass Sie die Wartezeit verkürzen, um festzustellen, ob noch alles in Ordnung ist. Obwohl Sie Ihre IDE veranlassen können, Sachen für Sie zu kompilieren, sobald Sie sie speichern, werden auf ihr nicht automatisch Komponententests ausgeführt, sodass mein CI-Server die Komponententests und Berichte zur Testfallabdeckung sowie andere Qualitätsanalysen meines Codes sofort ausführt Ich drücke es.
Der einzige Auslöser, den ich tun muss, ist, meine aktuellen Änderungen an der Versionskontrolle vorzunehmen, und ich kann zum Codieren zurückkehren. Und während ich über das Codieren nachdenke, ist das CI-System damit beschäftigt, die langwierigen Qualitätsberichte zu erstellen, die ich mir ab und zu ansehen werde, wenn mein Gehirn in eine Flaute gerät.
Ich habe einen separaten VMWare-Computer auf demselben Laptop, der die Builds für den von mir eingegebenen Code ausführt. Dazu erhalte ich nur ein schlüsselfertiges Linux-VMWare-Image und installiere die Jenkins mit apt-get und nehme einige kleinere Konfigurationsänderungen vor.
quelle