2017-05-18 1 views
0

Ich habe eine Website als azurblaue Webanwendung gehostet. Es ist eine asp.net-Website, die in einer vs-Lösung ist. Auf dem Ordner dieser Website befindet sich meine Produktdokumentation, alles als statische Ressourcen (HTML und Bilder). Diese statischen Ressourcen befinden sich in einem Ordner in anderen vs Lösung (das ist die tatsächliche Produktlösung). Beide Lösungen basieren auf TFS in VSO.So aktualisieren Sie einen Ordner in einem Azure AppService beim Einchecken in ein VSO TFS-Repository

Ab sofort habe ich einen Webjob im Kontext der Website, die im Wesentlichen einen "tfs get" im Dokumentationsordner macht und den Inhalt in den Dokumentationsordner auf der Website legt. Dies funktioniert, aber der vms, auf dem die Website ausgeführt wird, ändert sich ziemlich häufig und der Mechanismus zum Erstellen eines Arbeitsbereichs ist an den Computer und nicht an das Festplattenlaufwerk gebunden. So kann ich nicht nur die Änderungen bekommen, aber ich muss immer den ganzen Inhalt bekommen, der jetzt ungefähr 20 Minuten dauert und unnötige Last auf der Webseite verursacht. (Dies ist der Grund, warum ich diesen Webjob nur einmal pro Woche benutze.)

Jetzt suche ich nach einem besseren Weg, dies zu tun. Ich möchte nur die Dateien, die sich geändert haben, erhalten, was dies viel schneller macht und CPU/Laufwerk teuer macht.

fand ich keinen Weg, um einen Arbeitsbereich auf dem Webserver zu erstellen, die nicht jedes Mal ändern, vm die webservers verschwinden. (Wenn es möglich wäre, den Arbeitsbereich an das Laufwerk anzuhängen anstatt an den Computernamen, würde das das Problem lösen.)

Ich habe auch meine fortlaufende Build-Definition betrachtet, die ich für die Produktlösung ausgeführt habe. Als Teil davon denke ich, dass es möglich ist, eine Bereitstellung zu erstellen, bei der der Dokumentationsordner in den Dokumentationsordner der App Services kopiert wird. Auf diese Weise konnte ich den "speziellen" Webjob loswerden, aber ich würde immer noch alle Docs-Dateien kopieren. (Auch der Build-Agent dafür läuft auf dem Gelände, also müsste ich diese Dateien auch aus den Räumlichkeiten in die Cloud kopieren, wenn sie bereits in vso vorhanden sind.) Also im Grunde glaube ich nicht, dass diese Option für meinen Fall sehr nützlich ist.

Offensichtlich, wenn ich die statischen Docs-Ressourcen von der Produktlösung auf die Website-Lösung verschoben habe, könnte ich einfach die automatische Bereitstellung verwenden, die für Website-Projekte von vso zu azure Web-App verfügbar ist. Leider kann ich aus verschiedenen anderen Gründen (von denen die statischen Ressourcen teilweise automatisch aus den CS-Quellen in der Produktlösung erstellt werden) den Dokumentenordner einfach nicht von der Produktlösung auf die Website-Lösung verschieben.

So hat jemand einen Vorschlag für ein Verfahren, in dem ich die Dokumentationsordner in dem Web-App basierend auf Änderungen in den entsprechenden VSO Ordnern aktualisieren konnte?

Antwort

0

Hier ist, was ich tun endete:

  • eine ServiceHook in VSO Erstellt, die auf "Web-Hooks" verdrahtet ist.Der Hook wird bei jedem Check-In aufgerufen und nach dem gewünschten Verzeichnis gefiltert. (All das kann unter Verwendung der vorhandenen Funktionalität in VSO erfolgen.)
  • Der Hook ruft eine Azure "functionapp" auf (was einfach zu tun ist, weil Funktionsapps einen "HttpTrigger" -Mechanismus haben, der hier gut passt.)
  • Der Hook übergibt die ID des Checkins ChangeSet an die Funktion App.
  • Die FunctionApp fügt diese ID in eine Azure (Storage) -Warteschlange ein.
  • Dies löst einen azurblauen Webjob aus, der diese Warteschlange abhört. Dieser Webjob verwendet die ChangeSet-ID, um die Änderungen von VSO abzurufen, und wirkt sich auf den Changetyp für jede Änderung aus. (z. B .: Lädt eine Datei herunter oder löscht sie.)
1

Sie können die aktualisierten Dateien mithilfe der Kudu-API in den Azure App-Dienst hochladen. Einfache Schritte:

  1. erstellen Continuous Integration bauen
  2. prüfen zulassen Scripts für den Zugriff auf OAuth-Token-Option in Registerkarte Optionen
  3. hinzufügen Powershell-Schritt/Aufgabe check the changes with REST API. (Siehe Calling VSTS APIs with PowerShell)
  4. Fügen Sie Azure PowerShell Schritt/Aufgabe hinzu, um Dateien mithilfe von Kudu API in den App-Service hochzuladen. (Siehe Remove files and folders on Azure before a new deploy from VSTS)
Verwandte Themen