Jenkins zur Automatisierung der Bereitstellung von ASP.NET-Anwendungen

13

Gibt es eine Möglichkeit, Bereitstellungen von ASP.NET-Webanwendungen mithilfe von Jenkins zu automatisieren / halbautomatisieren? Es kann sich um eine kontrollierte oder unkontrollierte Umgebung handeln, da unkontrollierte Benutzer Benutzer-ID und Kennwort eingeben müssen. Ich suche nach Möglichkeiten, um die Dateien vom Ziel zum Ziel zu kopieren und SQL-Skripte im Webfarm-Szenario auszuführen.

Bearbeiten Zur Zeit verwenden wir bat-Dateien zum Kopieren / Konfigurieren des App-Pools / SQL-Cmd usw., um die Anwendung bereitzustellen. Damit dies jedoch funktioniert, muss das Produktionsteam den Quellcode herunterladen, das Projekt erstellen und die bat-Dateien ausführen, um die Anwendung bereitzustellen.

Jetzt möchten wir die Bereitstellung automatisieren, ohne dass der Benutzer den Quellcode herunterlädt. Der Endbenutzer muss lediglich eine URL aufrufen, die Benutzer-ID und die Kennwortparameter eingeben und das svn-Tag auswählen, damit es bereitgestellt wird. Da Jenkins jedoch unter anonymer Anmeldung ausgeführt wird, funktioniert die vorhandene bat-Datei nicht, da sie keine Berechtigungen zum Ausführen des Skripts besitzt.

Ich würde gerne wissen, ob es Alternativen für diese Art von Situation gibt. Es ist gut, wenn der Benutzerkontext unter Verwendung der eingegebenen Benutzer-ID und des Kennworts verkörpert wird, sodass die vorhandene Batchdatei ohne weitere Änderungen ausgeführt werden kann. Wenn es nicht möglich ist, möchten wir auch andere Ideen untersuchen, aber wir haben keine Flexibilität, ein automatisiertes Werkzeug wie Marionette usw. auszuwählen. Wir sollten uns an diese Batch-Dateien halten.

Sonnig
quelle
Das Teilen Ihrer Forschung hilft allen. Sagen Sie uns, was Sie probiert haben und warum es nicht Ihren Bedürfnissen entsprach. Dies zeigt, dass Sie sich die Zeit genommen haben, um sich selbst zu helfen, es erspart uns, offensichtliche Antworten zu wiederholen, und vor allem hilft es Ihnen, eine spezifischere und relevantere Antwort zu erhalten. Siehe auch Wie man fragt
Mücke
Aktualisieren Sie meine Frage, lassen Sie mich bitte wissen, wenn ich zusätzliche Informationen zur Verfügung stellen muss.
Sonnig

Antworten:

11

Ich teile mit, was wir verwendet haben und wo wir hin wollen. Vielleicht hilft es Ihnen, eine bessere Vorstellung zu bekommen.

  • Wir benutzen derzeit Jenkins und Github zusammen - sobald etwas mit dem Master verschmolzen ist, sagt Github es Jenkins und es startet einen Build.
  • Wir verwenden ein Nant-Skript für Jenkins, um das Projekt zu erstellen, Komponententests durchzuführen, und wenn alles gut aussieht, startet es ein weiteres Jenkins-Projekt. Das Nant-Skript spuckt auch ein Verzeichnis mit vollständig kompiliertem Code / minimiertem CSS / JS usw. aus.
  • Das sekundäre Jenkins-Projekt nimmt die Ausgabe aus dem Build und sendet sie in einem separaten Repository an Github zurück.
  • Eine .BAT-Datei wird alle 5 Minuten auf dem Staging-Webserver ausgeführt und prüft im Grunde genommen, ob Aktualisierungen für dieses Repository vorliegen. Wenn ein Update gefunden wird, laden wir den neuesten Build herunter, sichern unsere Staging-Dateien und stellen den neuesten Build im Staging-Ordner bereit.
  • Um live zu gehen, haben wir eine .BAT-Datei, die das Sichern der Live-Dateien und das Kopieren der Repository-Dateien über die Live-Dateien verwaltet. Es wird manuell ausgeführt. Es werden keine SQL-Aktualisierungen verarbeitet (diese werden von Hand ausgeführt).

Das ist natürlich nicht ganz ideal, aber es funktioniert für uns. Wir wollen dies in Zukunft erweitern auf:

  • Verwenden Sie Web Deploy , um die Dateien von Jenkins direkt an IIS zu übertragen und alle anderen Befehle auszuführen, die wir benötigen.
  • Verwenden Sie automatische Migrationen (eine Funktion von Entity Framework), um alle SQL-Aktualisierungen im Rahmen der Produktivsetzung durchzuführen.
Nikolaus
quelle
Es ist fast dasselbe, was wir verfolgen. Aber ich habe mich gefragt, ob Web Deploy Windows-Dienste usw. und alles, was für komplexe Webanwendungen erforderlich ist, installieren kann. Derzeit verwenden wir ps-Tools und es funktioniert einwandfrei. Für DB planen wir, das Tool DeployDB zu verwenden.
Sonnig
Wie gehen Sie mit Situationen um, in denen IIS Dateien sperrt? Wie gehen Sie mit Situationen um, in denen jemand mit Ihrer App arbeitet? Haben Sie mehrere Knoten oder brechen Sie nur die Anwendung für Benutzer, die zum Zeitpunkt der Veröffentlichung arbeiten?
Piotr Perak
1
@Peri - Ich habe vergessen, in meiner ursprünglichen Antwort zu erwähnen, aber wir planen, zwei Produktionsserver zu haben und bei Bedarf zwischen ihnen zu wechseln (mithilfe von IIS oder Nginx). Auf diese Weise können wir den anderen Live-Server "aufwärmen", wenn die Bereitstellung erfolgt, und dann auf ihn umschalten, sodass keine nennenswerten Ausfallzeiten auftreten sollten.
Nicholas
4

Ich benutze Jenkins bereits für .Net-Apps und TFS.

  1. Fügen Sie die erforderliche Konfiguration in Ihr Projekt ein und transformieren Sie den Code und checken Sie ihn ein.
  2. Holen Sie sich das Neueste von TFS (verwenden Sie das TFS-Plug-in)
  3. Erstellen Sie das Projekt (verwenden Sie das MSBuild-Plug-in). Sie können den Code von Msbuild mithilfe von Befehlszeilenargumenten veröffentlichen.
  4. Synchronisieren Sie den Code vom Veröffentlichungsspeicherort zum Ziel mithilfe des Befehls msdeploy.exe (unter "C: \ Programme (x86) \ IIS \ Microsoft Web Deploy V2 \ msdeploy.exe").
  5. Sie können E-Mails senden und die Sicherung auch über Jenkins durchführen.

Sie können MSTest.exe auch verwenden, um einen Komponententest auszuführen und an der Jenkin-Konsole anzuzeigen oder das Testergebnis ebenfalls zu veröffentlichen.

Sanjeev Kumar
quelle