kuaza
Elite Observer

Kann man einen Publizierungsauftrag beeinflussen?

Hallo zusammen,

bei einem Kunden von uns gibt es gewisse Schwierigkeiten mit einer Vollpublizierung.

Diese leert im Vorfeld das Generierungs-Verzeichnis und führt einen Komplettabgleich durch(was seine Zeit braucht..).

Backendseitig kommt dabei .NET zum Einsatz.

Wenn eine .NET Webapplikation vom Browser mindestens einmal aufgerufen wurde, entsteht im IIS ein Filelock, welcher dann das Löschen von Dateien/Verzeichnissen verhindert und damit auch unseren Publizierungsauftrag.

Als Lösung könnte man, solange die Publizierung aktiv ist, eine App_offline.htm in die webroot einsetzen, welche die Applikation offline setzt und damit das Filelock-Problem auflöst.

Nun die eigentliche Frage:

Wir hätten gerne, dass man quasi den Publizierungsauftrag anstößt, dadurch das Verzeichnis geleert wird, danach die App_offline.htm in das root-Verzeichnis eingespielt wird und dann die eigentliche Publizierung vollzogen wird.

Lässt sich diese Reihenfolge überhaupt per Publizierungsaktionen/Skript einrichten?

Mit freundlichen Grüßen,

Michael

0 Kudos
7 Replies
hoebbel
Crownpeak employee

Hallo Michael,

ich würde folgendes vorschlagen:

- FirstSpirit veröffentlicht in ein temporäres Verzeichnis auf dem Zielserver

- Nachdem die Veröffentlichung erfolgreich durchgeführt wurde, wird auf dem FirstSpirit Server ein Skript ausgeführt, welches sich mit dem Live-Server verbindet und dort wiederum ein Skript ausführt, welches die Applikation offline setzt, dann das temporäre Verzeichnis in das Live-Verzeichnis umbenennt/transferiert und danach die Applikation wieder online setzt.

Risiko: Wenn das Skript auf dem Live-System in einen Fehler läuft, ist die Applikation offline. Hier muss also ein entsprechender Sicherheitsmechanismus benutzt werden, der dies nach Möglichkeit verhindert Smiley Wink

Viele Grüsse aus Dortmund,

  Holger

0 Kudos

Danke erstmal für diesen Vorschlag, allerdings können wir so ein Risiko schlecht eingehen und auch der Aufwand dazu ist etwas zu hoch.

Uns wäre schon sehr geholfen, wenn man es irgendwie bewerkstelligen könnte, dass nach dem Leeren des Verzeichnisses sofort die App_offline.htm ins root-Verzeichnis gesetzt wird.

Wie ich das beobachten konnte, passiert nach dem Anstoß der Publizierung erstmal eine Weile nichts und anschließend wird alles von oben nach unten durchpubliziert und die App_offline.htm wird dabei leider erst gegen Ende angefasst.

Ursprünglich hatten wir die Idee, eine Datei namens App_online.htm im root zu lassen, diese dann nach beim Anstoßen der Publizierung in app_offline.htm umzubenennen. Durch den anschließenden Komplettabgleich wird diese aber wieder mitgelöscht.

Ich nehme mal an, dass es schwer wird hierfür eine Ausnahme einzufügen.

Kann man prinzipiell die Reihenfolge anpassen?

Gruß,

Michael

0 Kudos

Sie könnte doch vor dem eigentlichem Publizierungsauftrag noch ein Skript einfügen welches die App_Offline.htm erzeugt und auf den LIVE-Server schiebt. Nach dem Publizierungsauftrag wird die Datei durch ein weiteres Skript einfach wieder entfernt.

0 Kudos
kuaza
Elite Observer

Dieser Ansatz scheint auf den ersten Blick zu funktionieren.

Interessant wäre aber noch zu wissen, ob bei dem Komplett-Abgleich einer Vollpublizierung das Deployment-Verzeichnis(nicht Generierungsverzeichnis) vorher komplett gelöscht wird und anschließend wieder befüllt oder ob hier wirklich Stück für Stück eine Datei aus dem Generierungsverzeichnis mit der dazugehörigen Datei aus dem Deploymentverzeichnis abgeglichen und dann aktualisiert, bzw. gelöscht wird.

Ist Erstes der Fall, würde ja unsere App_Offline.htm für einen gewissen Zeitraum fehlen, was nicht sein darf.

Gruß,

Michael

0 Kudos
hoebbel
Crownpeak employee

Hallo Michael,

das kommt darauf an, wie veröffentlicht wird Smiley Wink

Die meisten Veröffentlichungen (rsync, CRC Deployment {aus dem Security Modul}) gehen dateiweise vor. FTP- und Dateideployment müssten ordnerweise vorgehen {erst alle Dateien im Ordner löschen, dann Neuanlegen}. Kann aber auch sein, dass hier ebenfalls dateiweise vorgegangen wird.

Viele Grüsse aus Dortmund,

  Holger

0 Kudos

Beim Deployment wird der Verzeichnisbaum traversiert. In welcher Reihenfolge pro Verzeichnis dann gelöscht und angelegt wird ist nicht deterministisch.

Ob überhaupt gelöscht wird, wird im Deployment-Eintrag bestimmt ("Komplett-Abgleich" = mit Löschen, im Gegensatz zu "Abgleich ohne Löschen").

[Diese Aussagen beziehen sich nicht auf rsync]

Peter
0 Kudos

Ok, mein Stand ist nun folgender:

1. Publizierungsauftrag wird gestartet

2. Ein Skript erstellt mir die App_offline.htm im root

3. Die Generierung wird angestoßen

4. Das Deployment startet

5. Ein weiteres Skript benennt die App_offline.htm in App_online.htm um.

So weit, so gut.

Schaue ich mir aber die Zeiten an, wann die Dateien das letzte Mal modifiziert wurden (im Dateisystem), fällt auf, dass Schritt 5. ein paar Sekunden vorher vollzogen wird, bevor das Deployment, also Schritt 4. vollständig abgeschlossen ist.

Ist hier FS einfach schneller als das Dateisystem, oder kann ich da noch eine Art Abfrage im Skript einbauen, welches wartet, bis Schritt 4. wirklich komplett abgeschlossen ist?

Edit: Dabei wird ein Komplett-Abgleich gemacht und es geht um ein gewöhnliches Dateideployment

Gruß,

Micha

0 Kudos