Beschreiben der besten Bereitstellungsumgebung, mit der Sie gearbeitet haben [geschlossen]

8

Der Joel-Test beinhaltet die Frage:

Können Sie in einem Schritt einen Build erstellen?

Was ist wichtig, aber ich frage mich, wie rationalisiert einige der Bereitstellungsprozesse waren?

Es gilt die gesamte Software von Shrink-Wrap bis Web: Mit welcher Bereitstellungsumgebung haben Sie am besten gearbeitet und welche Schritte waren erforderlich?

Steven Evers
quelle
Enthält der Joel-Test die Frage: "Stehen den Mitarbeitern ein privater Außenpool und Tennisplätze zur Verfügung?"
1
@Pierre 303 Nicht, aber wenn Sie einen haben, wohin kann ich meinen Lebenslauf senden? :)
Steven Evers
swift.com : Senden Sie Ihren Lebenslauf in der
Das Unglaublichste, was ich gesehen habe.

Antworten:

6

Es ist die Umgebung, die ich in meinem Unternehmen eingerichtet habe und mit der ich gerade arbeite.

Beschreibung der Umgebung

Wir sind ein Team von 4 Entwicklern , die an einem Java-Desktop-Projekt arbeiten . Der Quellcode befindet sich unter Mercurial , wobei das Haupt-Repo auf unserem Entwicklungsserver gehostet wird. Wir verwenden meistens TortoiseHg , um mit Mercurial zu arbeiten. Die Projekte, die wir eröffnen, sind auf BitBucket . Das Projekt wird mit Maven gebaut . Die IDE, die wir verwenden, ist Netbeans , was mit Maven beeindruckend gut funktioniert (auch mit Mercurial funktioniert es einwandfrei).

Auf unserem Entwicklungsserver wird Archiva ausgeführt , ein Proxy-Maven-Repository. Wir verwenden maven, um das Projekt zu erstellen, aber wir verwenden es auch, um es auszuführen (mvn exec), um die generierten Artefakte für Archiva bereitzustellen (mvn release) und um eine Assembly aus den von Archiva gehosteten Artefakten zu generieren (mvn Assembly).

Wir haben auch einen Redmine- Bugtracker, der die Mercurial-Repos kennt. Wir verwenden einen RSS-Client , um über die Projektaktivität informiert zu werden (von Redmine und Mercurial). Wir haben auch einen Jabber- Server, um Nachrichten und Dateien aneinander zu senden.

Wir haben einen Hudson- Server (kontinuierliche Integration) und einen Sonar- Server (Code-Metriken) eingerichtet. Aber in der Praxis verwenden wir es nicht wirklich.

Wir haben die Wahl zwischen Windows oder Linux

Schritte, um eine Veröffentlichung zu machen

Beispiel für die Veröffentlichung einer Version 1.1.3

# tags the VCS, updates all the version numbers in the maven config file
mvn --batch-mode release:prepare -DreleaseVersion=1.1.3 -DdevelopmentVersion=1.1.4-SNAPSHOT
# performs a clean build, runs all tests, deploys to the server
mvn release:perform
# creates a unique jar (the final product) from the previously deployed artifacts (no recomilation involved)
<update the version number in a config file to 1.1.3>
mvn assembly:assembly
Barjak
quelle
+1 für mvn release: perform
Fil
+1 für Sonar in Ihrem Erstellungsprozess. -1 für die Nichtverwendung.
Haller
Eigentlich weiß ich einfach nicht, was ich mit den Daten machen soll, die Sonar mir gibt. Das Betrachten der Statistiken der Codebasis macht Spaß, hilft mir aber bei meiner täglichen Arbeit nicht weiter. Oh, und ich mag keine statischen Analysewerkzeuge: Sie liefern zu viele Fehlalarme, um hilfreich zu sein.
Barjak
3

Ich habe Fabric verwendet, um die Bereitstellung in meinem neuen Start einzurichten.

Das Aktualisieren des Live-Servers ist so einfach wie:

fab prod upgrade

Dadurch wird die neueste Quelle abgerufen, eine Wartungsseite eingerichtet, die Datenbank migriert, der neue Code eingerichtet, alle Abhängigkeiten abgerufen, alles gestoppt / gestartet usw. Alle relevanten Informationen (Kennwörter, Benutzernamen usw.) sind vorhanden alle fragten im Voraus.

Ich führe einfach den Befehl aus, gebe einige Informationen ein und hole mir eine Tasse Kaffee. Bis ich zurück bin, lebt alles.

Sam Dolan
quelle
Das klingt himmlisch.
Steven Evers
2

Ich bin mir nicht sicher, ob ich Joel in diesem Punkt zustimme - sicherlich sind keine Schritte besser als einer?

Wir verwenden Hudson, um unsere Builds zu skripten (kontinuierlich auf Mac und Windows), einschließlich Installationsprogrammen und CD-Images für die wenigen Male, in denen wir tatsächlich eine echte Box versenden. Wir testen immer vom Installateur in der Qualitätssicherung.

Wir verwenden Hudson auch, um die Installer einmal täglich in den "Beta" -Bereich unserer Live-Website zu kopieren.

Im Wesentlichen können wir also jeden Tag in keinen Schritten für Benutzer bereitstellen. Wenn wir eine offizielle Version erstellen, ändern wir einfach die Dateinamen der Installer in CMS, um die aktuellen Beta-Installer zu den Release-Installern zu machen, und ändern das Ant-Build-Skript, um zur neuen Versionsnummer zu wechseln (die zur neuen Beta wird).

Wenn dies eingerichtet ist und funktioniert, wird der Veröffentlichungstag zu einem vollständigen Nicht-Ereignis (genau das sollte es sein). Wir haben am Veröffentlichungstag schon eine Weile keinen Fehler mehr gemacht (es war früher ein regelmäßiges Ereignis)!

Gebote
quelle
Wann wird der Build des Installationsprogramms ausgelöst, wenn nicht manuell? Regelmäßig ? Auf einem Commit-Event?
Barjak
1

Bei einem meiner Kunden arbeiten wir in Rails und haben alles so eingerichtet, dass die Bereitstellung von git erfolgt. Wir "bauen" jedoch nicht, da es sich um Rails handelt.

Der Bereitstellungsprozess ist also so etwas wie

git checkout review
git merge whatever-that-was
git push
cap review deploy:migrations

Die Mischung zwischen Capistrano und GIT funktioniert ziemlich gut.

Ein weiteres Skript wäre natürlich erforderlich, um einige dieser Schritte zu überspringen.

Dan Rosenstark
quelle
1

Mein aktueller Workflow ist so.

  1. Entwickeln Sie auf lokaler VM
  2. Testen, Änderungen festschreiben, auf Github drücken
  3. ssh in EC2 und ziehe Änderungen

Dies kann alles in einem Schritt geschrieben werden.

Mcotton
quelle
8
Sie können den Schritt 1 wirklich schreiben? :)
Barjak
öffentliches oder privates Github-Repository? Wenn letzteres, wie sind Ihre Erfahrungen?
Ich benutze ein öffentliches Repository, aber für ein früheres Projekt verwende ich Kiln von fogcreek als privates Repo.
Mcotton
@ ThorbjørnRavnAndersen: Ich benutze private Github-Repos. Es funktioniert einwandfrei, genau wie ein öffentliches, außer dass nur Sie darauf zugreifen können. :)
Bjarke Freund-Hansen
1

Wir haben eine Java Web Start-Anwendung - wir sind dabei, die Bereitstellungsprozedur als WAR-Datei neu zu erstellen, wobei die JNLP-Datei an die URL angepasst wird, die angefordert wird, wenn sie von den Benutzern angefordert wird.

Ich erwarte, dass das extrem reibungslos verläuft.

In letzter Zeit haben wir viel Git benutzt. Die Idee, Bereitstellungen in Git-Repositorys zu registrieren, damit Sie Git einfach bitten können, die Version zu überprüfen, die Sie ausführen möchten. Hintergrundaktualisierungen, sehr kurze Checkout-Zeit zum Aktualisieren der tatsächlichen Dateien, sehr kurze Checkout-Zeit zum Zurücksetzen auf eine frühere Version bei Problemen. Ich denke, es könnte sehr gut für uns funktionieren.


quelle
1

Zugegeben, dies ist jetzt ziemlich veraltet, aber ich hatte vor vielen Monden die folgenden Schritte, um meinen Code bereitzustellen, die ich als die beste empfand, die ich je hatte:

  1. Das Einchecken meines Codes ändert sich in Visual SourceSafe.
  2. Holen Sie sich die neueste Version auf dem Computer meines Chefs.
  3. Kompilieren Sie die Lösung, die einige DLLs erzeugt hat.
  4. Zeigen Sie, dass der neue Code ordnungsgemäß funktioniert hat.
  5. Trennen Sie den Produktionsserver vom Internet, um ihn störungsfrei zu aktualisieren.
  6. Kopieren Sie die Binärdateien auf den Produktionsserver.
  7. Starten Sie IIS.
  8. Wahlwiederholung über die verwendete ISDN-Leitung wieder ins Internet.

Dies war in den späten 1990er Jahren, als ich in Visual C ++ unter NT 4.0 für eine Dotcom programmierte. Die meisten Bereitstellungsprozesse seitdem sind komplizierter geworden, da nAnt-Aufgaben und andere zusätzliche Dinge wie der Umgang mit Produktionsservern mit Lastenausgleich ausgeführt wurden, während wir früher nur eine Produktionsbox hatten.

Die Übergabe des Prozesses an einen Release-Ingenieur ist besser, aber nicht ganz so, als würde ich den Code in die Wildnis bringen.

JB King
quelle
0

Nicht umsonst, aber mit der rechten Maustaste auf eine ASP.NET-Webanwendung zu klicken und Veröffentlichen auszuwählen, war eine schöne, angenehme Überraschung, als ich eine App bereitstellen musste. Zugegeben, ich musste das virtuelle Verzeichnis und dergleichen zuvor auf IIS einrichten, aber die Bereitstellung neuer Versionen ist nur ein paar Klicks entfernt.

HardCode
quelle