Welche Vorteile bieten Continuous Integration Tools für ein Einzelprojekt?

18

Wenn Sie ein Solo-Projekt ausführen - würden Sie CI-Tools verwenden, um aus einem Repository zu erstellen? Ich habe Hudson und Cruise Control in einer Teamumgebung eingesetzt, in der es unerlässlich ist, zu bauen, sobald jemand etwas eincheckt.

Ich denke, der Wert der Versionskontrolle ist immer noch offensichtlich, aber muss ich nach jedem Commit eine neue Version erstellen, da ich nur auf meinem lokalen Computer gebaut hätte und niemand anderes eine neue Version erstellt?

iftheshoefritz
quelle

Antworten:

12

Nun, ich plane, ein kontinuierliches Integrationstool für ein Projekt zu verwenden, und ich bin der einzigartige Entwickler. Die Notwendigkeit kommt da

  1. 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).
  2. 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.

Klaim
quelle
20

Ich würde nach einer kurzen Betrachtung lassen vermuten , dass es auch sein könnte , mehr für ein Solo - Entwickler wichtig als für ein Team.

Auf der einfachsten Ebene zeigt ein CI-Server, dass Sie Ihre Anwendung von Grund auf aus einer festgeschriebenen Quelle erstellen können. In Kombination mit einer Reihe anständiger Tests sollte er zeigen, dass Sie von Grund auf neu erstellen und ausführen können.

Da ich unter anderem versuche sicherzustellen, dass mein Build ein implementierbares Paket enthält, wissen Sie auch, dass Sie etwas zum Implementieren bereitstellen können (bereinigt und von einem bekannten Status / einer bekannten Version).

Wenn Sie jetzt File | New Project ausführen, sollten Sie wahrscheinlich das Erstellen oder Hinzufügen Ihres Repositorys und das Einrichten Ihres CI-Erstellungsskripts und des Bereitstellungs-Setups einschließen (auch wenn dies nur dazu dient, einen Stapel von Dingen für die xcopy-Bereitstellung zu komprimieren).


Nachtrag (2016) - Heutzutage wird mein CI-System auch ein wesentlicher Bestandteil meines Bereitstellungsprozesses sein. Daher hat sich sein Wert erhöht und ich werde auf keinen Fall ein Projekt ohne dieses ausführen. Die automatisierte Bereitstellung von Drucktasten entlastet den Prozess erheblich und in gewisser Weise ist die Form oder der Aufbau eines Build-Servers ein wesentlicher Bestandteil davon.

Murph
quelle
10
+1 Als Einzelentwickler besteht ein höheres Risiko für Probleme mit der Arbeit an meinem Computer
jk.
Downvotes ohne Grund sind nicht hilfreich - was ist daran falsch?
Murph
+1, ich sehe mich hier einer sehr ähnlichen Situation gegenüber - viele Projekte, die klein genug sind, um von jeweils nur einem Entwickler und einem großen Projekt von einem Team verwaltet zu werden. Bei den kleinen Projekten haben wir häufig das Problem, dass vergessen wird, eine bestimmte Quellcodedatei einzuchecken. Für das große Projekt ist dies nie zu einem Problem geworden, da sich die anderen sofort darüber beschweren werden, wenn einer der Teammitglieder vergisst, eine neue Datei zur Quellcodeverwaltung hinzuzufügen. Ich sollte hinzufügen, dass wir nächsten Monat einen CI-Server installieren werden - beginnend mit den kleinen Projekten!
Doc Brown
7

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:

make sense

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.

Tim Post
quelle
11
Denken Sie daran, Ihr "Sinn" -Ziel zu codieren, sonst könnten Sie bekommen make: don't know how to make sense. Stop. Argh!
Alan Pearce
@Alan - Sie haben uns in späteren Versionen den ganzen Spaß verdorben (zumindest GNU make). Jetzt bekommst du nur noch "make: *** Keine Regel, um das Ziel" sinnvoll "zu machen. Stop".
Tim Post
1
Schlagen Sie vor, zu FreeBSD zu wechseln. :)
Alan Pearce
1

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.

Onno
quelle
Es gelingt mir, eine erfolgreiche hausinterne Datenbankanwendung ohne den Overhead eines CI-Servers auszuführen. In einigen Bereichen ist ein wenig Disziplin erforderlich, aber weniger als der Aufwand für die Einrichtung all dieser Dinge.
wobbily_col
0

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.

Archimedes Trajano
quelle