Können Sie einen Build in einem Schritt erstellen?


14

Aus dem Joel-Test :

Können Sie einen Build in einem Schritt erstellen?

Ich muss sagen, dass ich nicht kann. Ich arbeite derzeit an einer Web-App mit einer Tabellenkalkulationsliste von Elementen, die ausgeführt werden müssen, um bereitgestellt zu werden. Meine Frage ist also, wie ich das automatisieren kann . Muss es organisationsweit sein? Tipps / Techniken?


3
Kommt darauf an, was die Elemente in der Liste sind? Im Idealfall sollte es möglich sein, dies zu automatisieren.
Niemand

4
en.wikipedia.org/wiki/Build_automation BTW: Einige bleiben einen Schritt ist einer zu viel :)
Mchl

Alle Arten - Dateien verschieben, gespeicherte Prozeduren ausschreiben usw. - es sind 14 Schritte!
billy.bob

2
Was auf der Liste können Sie aus einem anderen Blickwinkel nicht automatisieren?
Tyanna

1
Die Frage, wie ein Build automatisiert werden kann, ist nicht subjektiv und sollte bei Stack Overflow gestellt werden. Die Frage sollte auch weitere Informationen zu den erforderlichen Aufgaben enthalten, um eine nützliche Antwort zu erhalten.
David Thornley

Antworten:


10

Make kann den Build-Prozess in einem Schritt automatisieren. Make kann so ziemlich alles machen, was du willst. Ich bin nicht sicher, warum Sapporo glaubt, dass Make nur für C / C ++ gilt. Mit make können Sie jeden Befehlstyp ausführen. Es ist nicht einmal an das Programmieren gebunden, obwohl dies normalerweise der Fall ist.


2
make ist eines dieser "Schweizer Taschenmesser" -Werkzeuge. liebe es damit zu arbeiten. Wenn Sie Ihren Build / Prozess / etc automatisieren und einer oder mehrere Schritte davon abhängen, dass ein anderer erfolgreich abgeschlossen wurde, hört make auf, wenn dieser Schritt fehlschlägt, und lässt nicht zu, dass diese anderen Schritte ausgeführt werden möglicherweise Probleme verursachen.
Will

1
Da viele 'nix apps / systems' mit './configure' installiert werden; machen; make install 'Ich denke make eignet sich auch gut als Installations-Engine. Wenn es das kann, bin ich mir auch sicher, dass es das Problem des OP lösen kann.
JBRWilkinson

Make, aber die Syntax ist ziemlich dunkel. Bisher habe ich 2 Alternativen gefunden: SCons (viel einfacher als Make + makedepend) und ein Tool zur Automatisierung der Erstellung des Makefiles (proprietär).
Matthieu M.,

@JbRWilkinson ... wie gesagt make kann so ziemlich alles machen, was du willst;)
Pemdas

3

Abhängig von Ihrer Umgebung sollten Sie sich Make (C / C ++), Ant / Maven (Java) und Gradle (Groovy) ansehen. Die Chancen stehen gut, dass es eine beliebte Lösung für Ihre Umgebung gibt.


Es ist eine ASP.NET / SQL-Umgebung
billy.bob

@ m.edmondson - dann ist cruisecontrol.sourceforge.net wahrscheinlich dein Weg
bobah

Eine weitere gute kontinuierliche Integrationsumgebung für ASP.NET ist TeamCity. Ich habe es von CruiseControl und TeamCity verwendet und fand, dass TeamCity ein bisschen einfacher zu bedienen und ein bisschen leistungsfähiger ist. Das dürfte aber nicht mehr der Fall sein.
RationalGeek

NANT ist die .NET ANT-Variante, die wir auch als Ergänzung zu Cruise Control verwendet haben. Ich würde sie nicht verwenden, um Code für die Bereitstellung zu erstellen, bei dem Sie ein paar zusätzliche Dinge wünschen, z . Darin sind ANT / NANT gut.
Jon Hopkins

Ich schlage vor, dass @Jon Hopkinds Vorschlag - nant gut zu Ihrer Umgebung passt.
JBRWilkinson


0

Sicher gibt es eine Möglichkeit, dies zu automatisieren. Mit Tools wie Chef kann das Einrichten eines brandneuen, frisch installierten Servers so einfach sein wie:

knife bootstrap ip.address -N aNameForTheServer -r "role[some functionality]"

In meinem Fall sind einige Schritte, die von diesem einzelnen Befehl ausgeführt werden:

  • Installieren Sie die erforderlichen Bibliotheken, Programme und Python-Module
  • Erstellen Sie neue Benutzer mit festgelegten Zugriffsrechten
  • Erstellen Sie neue Datenbanken, laden Sie das erforderliche Schema, legen Sie die Eigentums- und Zugriffsrechte fest
  • Laden Sie den Projektcode herunter und stellen Sie ihn bereit. Schreiben Sie dann die Konfigurationsinformationen auf
  • Bringen Sie alles in den Produktionsmodus, indem Sie Datenbankserver starten, Cron-Jobs einrichten usw.

Ich bin nicht sicher, wie Chefkoch in Ihrer Umgebung abschneidet, da die Windows-Unterstützung als "vorläufig" aufgeführt ist, aber für UNIX-basierte Systeme sind es die Knie der Bienen.

Puppet ist ein ähnliches System, das etwas älter als der Koch ist und möglicherweise eine bessere Windows-Unterstützung bietet.


0

Mit Maven in der Java-Welt ist das ganz einfach

mvn clean deploy

In unserer Konfiguration erledigt dies den gesamten erforderlichen Aufbau der WAR-Datei (bei Bedarf die JAR-Abhängigkeiten einbeziehen), die Bereitstellung auf dem Dev-Webserver und die Erstellung von gespeicherten Testdaten in der Dev-Datenbank. Sobald dies erledigt ist, führt Maven die umfassenden Funktionstests durch SeleniumRC durch, um zu überprüfen, ob die Anwendung funktioniert.

Mit diesem einzigen Befehl wird die Anwendung vollständig auf dem Entwickler-Server-Cluster implementiert, sodass andere Entwickler sofort mit ihr arbeiten können (vorausgesetzt, sie hat die Tests bestanden). Es ist ungewöhnlich, dass eine Dev-Bereitstellung fehlschlägt, da die Entwickler überprüft haben, dass sie lokal funktioniertmvn clean install .

Das Snapshot-Artefakt (WAR) wird dann in das Maven-Repository kopiert, um es mit anderen Entwicklern zu teilen (gemäß dem Standardverhalten von Maven deploy).

OK, aber Sie haben nur einen Snapshot für Entwickler bereitgestellt. Was ist mit Test und Produktion?

Die Verteilung auf die Test- und (späteren) Produktionsserver erfolgt über den Maven-Release-Prozess, den wir gerne manuell abwickeln, um sicherzustellen, dass jemand auf verdächtige Ausgaben achtet. Tester arbeiten nur mit freigegebenen Artefakten, nicht mit Schnappschüssen.

Sobald es veröffentlicht ist, wird ein einfaches Build-Skript verwendet, um die WAR-Datei an den Testserver-Cluster zu senden, wobei wiederum jemand den Prozess überwacht, um sicherzustellen, dass nichts schief geht.

Schließlich, nachdem alle Tester zufrieden sind, wird die unveränderte WAR-Datei per SFTP an den Failover-Produktionsserver-Cluster übertragen, wobei jemand ein wachsames Auge hat und im Katastrophenfall eine sofortige Rollback-Position einnimmt.


0

Ich dachte, ich könnte das mal bei unserem Joel-Test überprüfen, also ...

Ich habe einen Build-Server in Python erstellt, der mit Pychron automatisiert wurde .

Der Code wurde über die Befehlszeile mit VSS synchronisiert und mit borland make erstellt (die meisten IDEs erstellen make-Dateien für Sie, unabhängig davon, ob sie diese als solche bezeichnen oder nicht. re MSBuild XML-Dateien und Sie können MSBuild verwenden) und die Fehler wurden in eine XML-Datei gestellt, die ich gerade hinzugefügt habe.

Also .. Schreiben Sie einfach eine Batch-Datei und machen Sie diese Dinge.

  1. Synchronisieren Sie Code aus der Quellcodeverwaltung
  2. Löschen Sie dumme Sachen (einzelne Konfigurationsdateien für Projekte), von denen Sie wissen, dass Sie nicht mehr in der Lage sind, alles zu erstellen.
  3. Alles bauen (ich würde alles bauen, alles zum Bruder machen).
  4. Protokollieren Sie Ihre Fehler und Warnungen, aber hören Sie nicht auf zu bauen. (Wenn Sie wirklich schlau sind, extrahieren Sie den Namen der letzten Person, die die Datei eingecheckt hat, die den Build abgebrochen hat, und senden ihm ein böses Gramm.)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.