Ich suche nach verschiedenen Techniken / Tools, die Sie zum Bereitstellen eines ASP.NET-Webanwendungsprojekts ( NICHT der ASP.NET-Website) für die Produktion verwenden.
Ich bin besonders an dem Workflow interessiert, der zwischen dem Zeitpunkt, zu dem Ihr Continuous Integration Build-Server die Binärdateien an einem bestimmten Ort löscht, und dem Zeitpunkt, zu dem die erste Benutzeranforderung diese Binärdateien erreicht, stattfindet.
Verwenden Sie bestimmte Tools oder nur XCOPY? Wie ist die Anwendung verpackt (ZIP, MSI, ...)?
Wie richten Sie den App-Pool und das virtuelle Verzeichnis ein, wenn eine Anwendung zum ersten Mal bereitgestellt wird (erstellen Sie sie manuell oder mit einem Tool)?
Wenn sich eine statische Ressource ändert (CSS, JS oder Image-Datei), stellen Sie die gesamte Anwendung oder nur die geänderte Ressource erneut bereit? Wie wäre es, wenn sich eine Assembly- / ASPX-Seite ändert?
Behalten Sie alle bereitgestellten Versionen für eine bestimmte Anwendung im Auge und haben Sie Verfahren, um die Anwendung auf einen zuvor bekannten Arbeitszustand zurückzusetzen, falls etwas schief geht?
Fühlen Sie sich frei, die vorherige Liste zu vervollständigen.
Und hier ist, was wir zum Bereitstellen unserer ASP.NET-Anwendungen verwenden:
- Wir fügen der Lösung ein Web Deployment-Projekt hinzu und richten es zum Erstellen der ASP.NET-Webanwendung ein
- Wir fügen der Lösung ein Setup-Projekt ( NICHT Web-Setup-Projekt) hinzu und legen fest, dass es die Ausgabe des Web-Bereitstellungsprojekts übernimmt
- Wir fügen eine benutzerdefinierte Installationsaktion hinzu und führen im OnInstall-Ereignis eine benutzerdefinierte Build-.NET-Assembly aus, die mithilfe von System.DirectoryServices.DirectoryEntry einen App-Pool und ein virtuelles Verzeichnis in IIS erstellt. (Diese Aufgabe wird nur ausgeführt, wenn eine Anwendung zum ersten Mal bereitgestellt wird.) . Wir unterstützen mehrere Websites in IIS, Authentifizierung für virtuelle Verzeichnisse und Festlegen von Identitäten für App-Pools.
- Wir fügen eine benutzerdefinierte Aufgabe in TFS hinzu, um das Setup-Projekt zu erstellen (TFS unterstützt keine Setup-Projekte, daher mussten wir devenv.exe zum Erstellen des MSI verwenden).
- Das MSI wird auf dem Live-Server installiert (wenn es eine frühere Version des MSI gibt, wird es zuerst deinstalliert).
quelle
Antworten:
Wir haben unseren gesamten Code in MSIs mithilfe von Setup Factory bereitgestellt. Wenn sich etwas ändern muss, stellen wir die gesamte Lösung erneut bereit. Dies klingt nach einem Overkill für eine CSS-Datei, hält jedoch absolut alle Umgebungen synchron und wir wissen genau, was in der Produktion ist (wir stellen sie auf alle Test- und UAT-Umgebungen auf die gleiche Weise bereit).
quelle
Wir führen eine fortlaufende Bereitstellung auf den Live-Servern durch, sodass wir keine Installationsprojekte verwenden. Wir haben so etwas wie CI:
robocopy stellt automatisch sicher, dass nur Änderungen bereitgestellt werden.
Bezüglich des App-Pools usw.; Ich würde es lieben , wenn dies automatisiert würde ( siehe diese Frage ), aber im Moment ist es manuell. Das möchte ich aber wirklich ändern.
(Es hilft wahrscheinlich, dass wir ein eigenes Rechenzentrum und eine eigene Serverfarm "vor Ort" haben, sodass wir nicht viele Hürden überwinden müssen.)
quelle
approved
Quelle um? Geäst?Webseite
Bereitsteller: http://www.codeproject.com/KB/install/deployer.aspx
Ich veröffentliche die Website in einem lokalen Ordner, komprimiere sie und lade sie dann über FTP hoch. Deployer auf dem Server extrahiert dann zip, ersetzt Konfigurationswerte (in Web.Config und anderen Dateien) und fertig.
Natürlich müssen Sie für die erste Ausführung eine Verbindung zum Server herstellen und die IIS-WebSite-Datenbank einrichten, aber danach ist das Veröffentlichen von Updates ein Kinderspiel.
Datenbank
Um Datenbanken synchron zu halten, verwende ich http://www.red-gate.com/products/sql-development/sql-compare/
Wenn sich der Server hinter einer Reihe von Routern befindet und Sie keine direkte Verbindung herstellen können (was für SQL Compare erforderlich ist), verwenden Sie https://secure.logmein.com/products/hamachi2/ , um ein VPN zu erstellen.
quelle
Ich stelle hauptsächlich ASP.NET-Apps auf Linux-Servern bereit und stelle alles für die kleinste Änderung erneut bereit. Hier ist mein Standard-Workflow:
Das Auschecken erfolgt mit der Befehlszeilenversion von Subversion und das Erstellen erfolgt mit xbuild (msbuild funktioniert ähnlich wie im Mono-Projekt). Der größte Teil der Magie wird in ReleaseIt ausgeführt.
Auf meinem Entwicklungsserver habe ich im Wesentlichen eine kontinuierliche Integration, aber auf der Produktionsseite habe ich tatsächlich SSH in den Server und initiiere die Bereitstellung manuell, indem ich das Skript ausführe. Mein Skript heißt geschickt 'deploy', also tippe ich es an der Bash-Eingabeaufforderung. Ich bin sehr kreativ Nicht.
In der Produktion muss ich zweimal 'deploy' eingeben: einmal zum Auschecken, Erstellen und Bereitstellen in einem datierten Verzeichnis und einmal, um dieses Verzeichnis zur Standardinstanz zu machen. Da die Verzeichnisse datiert sind, kann ich zu jeder vorherigen Bereitstellung zurückkehren, indem ich einfach 'deploy' aus dem entsprechenden Verzeichnis eingebe.
Die Erstbereitstellung dauert einige Minuten und die Umstellung auf eine frühere Version einige Sekunden.
Es war eine gute Lösung für mich und basiert nur auf den drei Befehlszeilenprogrammen (svn, xbuild und releaseit), dem DB-Client, SSH und Bash.
Ich muss die Kopie von ReleaseIt auf CodePlex wirklich irgendwann aktualisieren:
http://releaseit.codeplex.com/
quelle
Einfache XCopy für ASP.NET. Zip es hoch, sftp zum Server, extrahiere an den richtigen Ort. Bei der ersten Bereitstellung wird IIS manuell eingerichtet
quelle
Beantwortung Ihrer Fragen:
Für DLLs stellen wir die geänderten DLL- und ASPX-Seiten bereit.
Es schön und einfach zu halten, hat uns bisher viele Kopfschmerzen erspart.
quelle
Als Entwickler für BuildMaster verwende ich dies natürlich. Alle Anwendungen werden im Tool als Artefakte erstellt und verpackt, die intern als ZIP-Dateien gespeichert werden.
Manuell - Wir erstellen eine Änderungskontrolle innerhalb des Tools, die uns an die genauen Schritte erinnert, die in zukünftigen Umgebungen ausgeführt werden müssen, wenn sich die Anwendung durch ihre Testumgebungen bewegt. Dies könnte auch mit einem einfachen PowerShell-Skript automatisiert werden. Wir fügen jedoch nicht sehr oft neue Anwendungen hinzu, sodass die 1-minütige manuelle Erstellung der Site genauso einfach ist.
Standardmäßig ist der Prozess zum Bereitstellen von Artefakten so eingerichtet, dass nur geänderte Dateien auf den Zielserver übertragen werden. Dies umfasst alles von CSS-Dateien, JavaScript-Dateien, ASPX-Seiten und verknüpften Assemblys.
Ja, BuildMaster erledigt das alles für uns. Das Wiederherstellen ist meistens so einfach wie das erneute Ausführen einer alten Build-Heraufstufung. Manchmal müssen Datenbankänderungen jedoch manuell wiederhergestellt werden, und es kann zu Datenverlust kommen. Der grundlegende Rollback-Prozess wird hier detailliert beschrieben: http://inedo.com/support/tutorials/performing-a-deployment-rollback-with-buildmaster
quelle
Web-Setup / Installationsprojekte - so können Sie es einfach deinstallieren, wenn etwas schief geht
quelle
Unfold ist eine Capistrano-ähnliche Bereitstellungslösung, die ich für .net-Anwendungen geschrieben habe. Es ist das, was wir für alle unsere Projekte verwenden, und es ist eine sehr flexible Lösung. Es löst die meisten typischen Probleme für .net-Anwendungen, wie in diesem Blog-Beitrag von Rob Conery erläutert.
Hier ist eine Einführung und einige andere Blog-Beiträge.
Um die obigen Fragen zu beantworten:
Wie ist die Anwendung verpackt (ZIP, MSI, ...)?
Git (oder ein anderer scm) ist die Standardmethode, um die Anwendung auf dem Zielcomputer abzurufen. Alternativ können Sie einen lokalen Build durchführen und das Ergebnis über die Powereshell-Remoting-Verbindung kopieren
Wie richten Sie den App-Pool und das virtuelle Verzeichnis ein, wenn eine Anwendung zum ersten Mal bereitgestellt wird (erstellen Sie sie manuell oder mit einem Tool)?
Unfold konfiguriert den Anwendungspool und die Website-Anwendung mithilfe des WebAdministration-Moduls von Powershell. Es ermöglicht uns (und Ihnen), jeden Aspekt des Anwendungspools oder der Website zu ändern
Wenn sich eine statische Ressource ändert (CSS, JS oder Image-Datei), stellen Sie die gesamte Anwendung oder nur die geänderte Ressource erneut bereit? Wie wäre es, wenn sich eine Assembly- / ASPX-Seite ändert?
Ja, entfaltet dies, jede Bereitstellung wird neben den anderen installiert. Auf diese Weise können wir leicht einen Rollback durchführen, wenn etwas schief geht. Außerdem können wir eine bereitgestellte Version problemlos auf eine Versionskontrolle zurückführen.
Verfolgen Sie alle bereitgestellten Versionen für eine bestimmte Anwendung?
Ja, entfalten hält alte Versionen herum. Nicht alle Versionen, aber eine Reihe von Versionen. Es macht das Zurückrollen fast trivial.
quelle
Wir haben unseren Veröffentlichungsprozess im letzten Jahr verbessert und jetzt haben wir es geschafft. Ich verwende Jenkins, um alle unsere automatisierten Builds und Releases zu verwalten, aber ich bin sicher, dass Sie TeamCity oder CruiseControl verwenden können.
Beim Einchecken führt unser "normaler" Build Folgendes aus:
<MvcBuildViews>true</MvcBuildViews>
meine .csproj-Dateien eingegeben hatte, um die Ansichten zu kompilieren, stürzte msbuild zufällig ab, sodass ich es deaktivieren musste.)Wenn jemand auf "Für UAT bereitstellen" klickt:
Wenn wir auf "Deploy to Prod" klicken:
Alles in allem dauert ein vollständiger Build bis zur Produktion ungefähr 30 Sekunden, mit denen ich sehr, sehr zufrieden bin.
Vorteile dieser Lösung:
Die Hauptnachteile dieser Lösung sind:
Ich würde gerne weitere mögliche Verbesserungen hören!
quelle
Im Jahr 2009, als diese Antwort stammt, haben wir CruiseControl.net für unsere Builds zur kontinuierlichen Integration verwendet, die auch Release Media ausgaben.
Von dort aus haben wir die Smart Sync-Software verwendet , um sie mit einem Produktionsserver zu vergleichen, der sich außerhalb des Lastausgleichspools befand, und die Änderungen nach oben verschoben.
Nach der Validierung der Version haben wir schließlich ein DOS-Skript ausgeführt, das hauptsächlich RoboCopy verwendete, um den Code mit den Live-Servern zu synchronisieren und IIS sofort zu stoppen / zu starten.
quelle
Bei der letzten Firma, für die ich gearbeitet habe, haben wir eine rSync-Batchdatei bereitgestellt, um nur die Änderungen seit dem letzten Upload hochzuladen. Das Schöne an rSync ist, dass Sie Ausschlusslisten hinzufügen können, um bestimmte Dateien oder Dateinamenmuster auszuschließen. So ist es zum Beispiel sehr einfach, alle unsere CS-Dateien, Lösungs- und Projektdateien auszuschließen.
Wir haben TortoiseSVN für die Versionskontrolle verwendet, und daher war es schön, mehrere SVN-Befehle schreiben zu können, um Folgendes zu erreichen:
Darüber hinaus gibt es eine zweite Batch-Datei, die nur auf dem Live-Server nach Dateidifferenzen sucht. Dies kann das häufig auftretende Problem hervorheben, bei dem jemand seine Änderungen hochlädt, aber nicht an SVN festschreibt. In Kombination mit dem oben erwähnten Synchronisierungsprotokoll konnten wir herausfinden, wer der wahrscheinliche Schuldige war, und sie bitten, ihre Arbeit zu begehen.
Und schließlich können Sie mit rSync eine Sicherungskopie der Dateien erstellen, die beim Hochladen ersetzt wurden. Wir haben sie in einen Sicherungsordner verschieben lassen. Wenn Sie also plötzlich feststellen, dass einige der Dateien nicht überschrieben werden sollten, finden Sie die letzte Sicherungsversion jeder Datei in diesem Ordner.
Während sich die Lösung zu der Zeit etwas klobig anfühlte, habe ich sie seitdem viel mehr zu schätzen gelernt, wenn ich in Umgebungen arbeite, in denen die Upload-Methode viel weniger elegant oder einfach ist (z. B. Remotedesktop, Kopieren und Einfügen der gesamten Site). .
quelle
Ich würde empfehlen, NICHT nur vorhandene Anwendungsdateien zu überschreiben, sondern stattdessen ein Verzeichnis pro Version zu erstellen und die IIS-Anwendung dem neuen Pfad zuzuordnen. Dies hat mehrere Vorteile:
Das einzige Problem, das wir hatten, ist das Zwischenspeichern von Ressourcen, wenn Sie den App-Pool nicht neu starten und sich auf den automatischen Appdomain-Wechsel verlassen.
quelle