webentwicklung-frage-antwort-db.com.de

Bereitstellen von Azure WebJob als Teil der automatischen VSTS-Bereitstellung

Gibt es eine Möglichkeit, meinen Azure WebJob automatisch bereitzustellen, ohne mit der rechten Maustaste klicken und "Jedes Mal als Azure WebJob veröffentlichen" auswählen zu müssen? Wenn ich meine Lösung einchecke, wird sie automatisch im Azure Portal-Webjob-Bereich bereitgestellt

9
Jaja1415

Ja, du kannst.

Brady Gaster hat darüber in einem Blogbeitrag geschrieben (habe es selbst nicht probiert).

Von dem, was ich erfasse, ist der TL; DR; Zusammenfassung ist die folgende:

fügen Sie dem Eigenschaftenordner des Web Application Project oder der Konsolenanwendung, die Sie veröffentlichen, eine Datei mit dem Namen webjobs.props hinzu

Bearbeiten Sie die Datei anschließend so, dass die ManagementCertificate, SubscriptionId und PublishSettingsPath mit korrekten Daten gefüllt sind.

Jetzt sollten Sie die Dateien mit dem Befehl veröffentlichen können

msbuild WebJobDemo.Web.csproj /p:DeployOnBuild=true /p:PublishProfile=WebJobDemo /p:VisualStudioVersion=12.0 /p:Password=asdfasdf

(Hinweis, Beitrag wird für VS2013 geschrieben)

Danach sollte man so etwas sehen .  deployment output

Sie können dies natürlich in VSTS (oder einem anderen Build-/Bereitstellungstool) automatisieren, wenn etwas in Ihr Repository eingecheckt wird.

Eine (ziemlich vollständige) Antwort, wie Sie dies in VSTS über die Befehlszeile ausführen können, finden Sie in dieser Antwort: https://stackoverflow.com/a/45703975/352640

4
Jan_V

Sie können dies über Continuous Integration Build durchführen (das Build beim Einchecken auslösen).

In Bezug auf die Implementierung von WebJob können Sie ein Paket über die Task Visual Studio Build mit dem Argument /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.stagingDirectory)" erstellen.

Stellen Sie sie dann über die Azure App-Bereitstellungstask bereit.

Weitere Informationen: Bereitstellen und Planen von Azure WebJobs von VSTS für Azure Web App

3

Während ich dies versucht habe, habe ich herausgefunden, dass es für Dotnet-Kernprojekte derzeit keine Werkzeugunterstützung gibt. Die vorgeschlagenen webjobs.props/msbuild-Lösungen sind alle Dotnet-Framework-spezifisch.

Ich habe jedoch auch herausgefunden, dass ein Webjob alles sein kann, das auf dem lokalen Computer ausgeführt werden kann (knoten.js oder nur ein Stapelbefehl). 


Der Schlüssel ist zu verstehen, wie WebJobs vom Host erkannt werden:

  • Ein WebJob auf einem Windows-Host ist (von dem, was ich aus dem Experimentieren gelernt habe) nur eine run.cmd-Datei, die Anweisungen zum Starten des WebJob enthält. Für Dotnet-Core wäre dies dotnet MyDll.dll %* (%*, um Argumente für die Ausgabeumleitung usw. vom Host zu übergeben). 
  • Je nachdem, ob der Job kontinuierlich ist oder ausgelöst wurde, muss sich die run.cmd-Datei entweder unter app_data/jobs/continuous/[NameOfJob] oder app_data/jobs/triggered/[NameOfJob] befinden. Für den ausgelösten Job können Sie auch einen Zeitplan hinzufügen, indem Sie eine settings.job-Datei wie hier verwenden. 
  • Wenn sich an der richtigen Stelle ein run.cmd befindet, wird er als WebJob erkannt

Führen Sie die folgenden Schritte aus, um einen Webjob mit VSTS unabhängig vom Laufzeit-Framework bereitzustellen:

  1. Erstellen/veröffentlichen Sie Ihren WebJob, um die ausführbaren Dateien zu erhalten
  2. Fügen Sie neben Ihren ausführbaren Webjob-Dateien eine run.cmd-Datei mit den richtigen Startanweisungen hinzu. Sie können hier ggf. auch settings.job hinzufügen.
  3. Erstellen Sie die Ordnerhierarchie app_data/jobs/[triggered/continuous]/[nameOfJob] und kopieren Sie Ihre ausführbaren Dateien in den untersten Ordner. Stellen Sie sicher, dass sich run.cmd direkt im Verzeichnis [nameOfJob]/ befindet
  4. Zip des app_data-Ordners, damit das Zip-Paket die gesamte Hierarchie enthält
  5. Veröffentlichen Sie Ihre ZIP-Datei mit der normalen Azure App Service-Bereitstellungsaufgabe (wie bei der Bereitstellung der Web-App).

Und das ist es.

0
Peter