Webapplicatie publiceren met Web Deploy vanaf de command-line

Je wilt jouw webapplicatie, zoals Umbraco 8, graag publiceren via de command-line? Wij bieden je deze mogelijkheid via onze Web Deploy-service. In dit FAQ-artikel laten we je zien hoe je dit kunt doen met msdeploy.exe


Dit voorbeeld gaat ervan uit dat je Umbraco 8 hebt gedownload en de VS Code installation hebt gevolgd. Je hebt dan je Umbraco-website lokaal klaarstaan in bijvoorbeeld de map C:\Users\Jan\dev\site. Hoe krijg je die nou gepubliceerd? Simpel, met msdeploy.exe (onderdeel van Web Deploy).


Let wel, Umbraco met een SQL Server Compact database wordt niet ondersteund, gebruik bij voorkeur Microsoft SQL Server. Zorg ervoor dat je tenminste Web Deploy 3.6 hebt geïnstalleerd, of Visual Studio 2019. Web Deploy wordt meegeïnstalleerd met Visual Studio.


Wil je nog even teruglezen wat Web Deploy Publish ook alweer is en waarom het handig is?


ASP.NET webapplicatie deployment met Web Deploy en PowerShell

Je kunt eenvoudig je ASP.NET of ASP.NET Core webapplicatie publiceren met msdeploy.exe.


Voor Windows gebruikers is PowerShell helemaal hip, dus gebruiken we dat in ons voorbeeld ook: Using WebDeploy in a CI/CD pipeline with PowerShell.


Nadat onze klantenservice een FTP-gebruiker van jouw site heeft geautoriseerd voor Web Deploy toegang kun je de volgende drie variabelen maken (example.nl als voorbeeld):

$gebruiker = "VEVIDA\example.nl"
$website = "example.nl"
$wachtwoord = "my-super-secret passphrase"
Let op: zolang je dit niet in een script opslaat ben je de variabelen kwijt als je je PowerShell-sessie hebt afgesloten.


Hierna kun je de msdeploy.exe parameters opvragen met "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" /? en je volledige commando samenstellen.

Het volledige commando kan bijvoorbeeld zijn:

&"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe"
  -verb:sync
  -source:iisApp="C:\Users\Jan\dev\site" 
  -allowUntrusted
  -dest:iisApp="${website}",
  ComputerName="https://www.${website}:8172/msdeploy.axd?site=${website}",
  UserName="${gebruiker}",
  Password="${wachtwoord}",
  AuthType='Basic'
  -Verbose
Tip: gebruik -enableRule:AppOffline om een applicatie eerst offline te brengen zodat bestanden niet meer in gebruik zijn.
Let op: het commando hierboven moet op één (1) regel achterelkaar staan.


Wat uitleg over de commando-opties (met een * erachter is verplicht):

  • -verb:sync synchroniseer destination met source
  • -source:iisApp de source (bronlocatie) op de computer, waarbij de te gebruiken provider iisApp is. Eventueel kun je hier contentPath gebruiken (*)
  • -allowUntrusted accepteer niet vertrouwde SSL-servercertificaten (*)
  • -dest:iisApp de destination (doellocatie op de webserver), waarbij de te gebruiken provider iisApp is. Eventueel kun je hier contentPath gebruiken. Ook ComputerName, UserName, Password en AuthType moeten gespecificeerd zijn (*)
  • -Verbose geef extra informatie weer (uitgebreide registratie)


Publiceren naar een subfolder

Als je je webapplicatie wilt publiceren naar een subfolder, dan kun je die simpelweg opgeven als destination: -dest:iisap="${website}"/mijn-map,. Publiceer je een ASP.NET of ASP.NET Core webapplicatie? Vergeet dan niet de map aan te merken als applicatie in MyVevida.


Webapplicatie downloaden met msdeploy.exe / Web Deploy

Je kunt ook je webapplicatie downloaden met msdeploy.exe, bijvoorbeeld als back-up. Wissel gewoon -source en -dest locaties om:

&"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe"
  -verb:sync
  -source:iisApp="${website}/cms",
  ComputerName="https://www.${website}:8172/msdeploy.axd?site=${website}",
  UserName="${gebruiker}",
  Password="${wachtwoord}",
  AuthType='Basic'
  -Verbose
  -allowUntrusted
  -dest:iisapp="C:\Users\Jan\dev\back-up\UmbracoCms.8.4.0"

Zo maak je eenvoudig een website back-up met Web Deploy


Tips voor het gebruik van Web Deploy en msdeploy.exe

Gebruik includeAcls="False" om geen bestand- en directorypermissies proberen te wijzigen. Rechten moeten worden gezet via MyVevida. Je kunt includeAcls=”False” meegeven in het destination object: 

-dest:iisApp="${website}",ComputerName="https://www.${website}:8172/msdeploy.axd?site=${website}",UserName="${gebruiker}",Password="${wachtwoord}",includeAcls="False",AuthType='Basic'

Je kunt de map /stats uitsluiten van verwijderen met de parameter: 

-skip:skipaction='Delete',objectname='dirPath',absolutepath='\\stats'
Let op: in het commando moet je de forward slash (/) omdraaien (\ – backslash) en ‘escapen’: gebruik daarom twee backlashes (\\).

Dit vertelt msdeploy.exe dat de actie “delete” voor de map \\stats overgeslagen moet worden. Standaard wordt de externe locatie op de webserver gesynchroniseerd met de situatie zoals die lokaal op jouw computer is. Heb jij geen map genaamd “stats” in de te publiceren applicatie, dan wordt die van de server verwijderd.


Dit is ook de reden waarom je soms het web.config-bestand dat op de webserver staat moet uitsluiten van verwijderen. Sluit deze uit met de volgende opdracht:

-skip:skipaction='Delete',objectname='filePath',absolutepath='\\web\.config'

Let op: Ook een punt (.) moet geëscapet moet worden met nog een backslash (\).


Een bestand uitsluiten van uploaden kan met de opdracht: 

-skip:objectName=filePath,absolutePath='\\foobar\.txt'

Waarbij foobar.txt het bestand is dat niet geüpload moet worden. Voor directories gebruik je: 

-skip:objectName=dirPath,absolutePath='\\\.vscode$'

Zo zie je dat je met ‘skipaction’ een opdracht geeft (Delete) en met ‘objectName’ uiteindelijk een bestands- of directorynaam (foobar.txt of .vscode). 


Web Deploy foutmeldingen

Als je tijdens het publiceren een foutmelding ERROR_INSUFFICIENT_ACCESS_TO_SITE_FOLDER krijgt, dan betekent dat vaak dat een bestand nog in gebruik is. Als je even eerst de webapplicatie herstart in MyVevida, dan zal het publiceren daarna wel lukken.


De volledige foutmelding is bijvoorbeeld:

Info: Deleting file (example.nl\Askmethat.Aspnet.JsonLocalizer.dll).
Error Code: ERROR_INSUFFICIENT_ACCESS_TO_SITE_FOLDER
More Information: Unable to perform the operation (“Delete File”) for the specified directory (“Askmethat.Aspnet.JsonLocalizer.dll”). This can occur if the server administrator has not authorized this operation for the user credentials you are using.
Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_INSUFFICIENT_ACCESS_TO_SITE_FOLDER.
Error count: 1.

Hetzelfde geldt voor de ERROR_FILE_IN_USE foutmelding:

Error Code: ERROR_FILE_IN_USE
More Information: Web Deploy cannot modify the file ‘NuCache.Content.db’ on the destination because it is locked by an external process. In order to allow the publish operation to succeed, you may need to either restart your application to release the lock, or use the AppOffline rule handler for .Net applications on your next publish attempt.
  Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE.

Microsoft heeft uitgebreide documentatie over Web Deploy foutcodes, maak er gebruik van.


Msdeploy.exe versies

Het is mogelijk dat je meerdere versies van msdeploy.exe op je computer hebt staan. Gebruik bijvoorbeeld Get-ItemProperty in PowerShell om de versie te identificeren: 

(Get-ItemProperty "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe").VersionInfo.FileVersion
(Get-ItemProperty "C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe").VersionInfo.FileVersion

Gebruik C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe /? om de opdracht argumenten van MSDeploy op te vragen. 


Msdeploy.exe ondersteuning

Onze klantenservice geeft helaas geen ondersteuning op het gebruik van msdeploy.exe via de command-line. Maar wil je graag tips en handigheidjes (of eigenaardigheden) aan ons doorgeven, aarzel dan niet om contact op te nemen.


Q
Quinten is the author of this solution article.

Was dit antwoord nuttig? Ja Nee

Feedback versturen
Het spijt ons dat we u niet hebben kunnen helpen. Als u feedback geeft, kunnen we het artikel verbeteren.