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?
project-management
deployment
Steven Evers
quelle
quelle
Antworten:
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
quelle
Ich habe Fabric verwendet, um die Bereitstellung in meinem neuen Start einzurichten.
Das Aktualisieren des Live-Servers ist so einfach wie:
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.
quelle
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)!
quelle
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
Die Mischung zwischen Capistrano und GIT funktioniert ziemlich gut.
Ein weiteres Skript wäre natürlich erforderlich, um einige dieser Schritte zu überspringen.
quelle
Mein aktueller Workflow ist so.
Dies kann alles in einem Schritt geschrieben werden.
quelle
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
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:
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.
quelle
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.
quelle