Search code examples
c#azureazure-web-app-serviceweb-deploymentmsdeploy

Microsoft.Web.Deployment: How to take the target offline before syncing the new version?


I have a problem with the Microsoft.Web.Deployment package. someone here could tell me, how i must write / configure the sync-process, that the target will be shutdown, before updating it with the new version?

here is my snippet:

var publishSettings = GetPublishSettings(subscriptionId, resourcegroupName, websiteName);
var sourceBaseOptions = new DeploymentBaseOptions();

var targetBaseOptions = new DeploymentBaseOptions
{
    ComputerName = publishSettings.ComputerName,
    UserName = publishSettings.Username,
    Password = publishSettings.Password,
    AuthenticationType = "basic",
    TraceLevel = Verbose
 };
 targetBaseOptions.Trace += TargetBaseOptions_Trace;
 var syncOptions = new DeploymentSyncOptions
 {
     DoNotDelete = false,
     WhatIf = false,
     UseChecksum = true
 };

 using (var deploymentObject = DeploymentManager.CreateObject(DeploymentWellKnownProvider.ContentPath, Path.GetFullPath(websitePath), sourceBaseOptions))
 {
       var summary = deploymentObject.SyncTo(DeploymentWellKnownProvider.ContentPath, publishSettings.SiteName, targetBaseOptions, syncOptions);
       if (summary.Errors > 0) throw new Exception("Website Deployment failed");
       if (summary.Errors == 0)
       {
           Console.WriteLine($"{publishSettings.SiteName}: erfolgreich");
       }
 }

i could imagine that it is something in the DeploymentSyncOptions

thank you guys


Solution

  • From Microsoft.Web.Deployment, I could not find it provides method or option to manage (stop, restart etc) Azure web site. If you’d like to stop your Azure web site before you do deployment, you could try to use Microsoft.Azure.Management.WebSites that provides website management capabilities for Microsoft Azure.

    WebSiteManagementClient websiteManagementClient = new WebSiteManagementClient(cred);
    
    websiteManagementClient.SubscriptionId = "your subscription id here";
    websiteManagementClient.Sites.StopSite(AzureResourceGroup, siteName);
    

    and you could use websiteManagementClient.Sites.GetSite(AzureResourceGroup, siteName).State to check the site state.

    enter image description here