Пример #1
0
        public static AzureTargetSite GetAzureTargetSite(string siteAndMaybeSlotName, string slotName)
        {
            AzureTargetSite targetSite = new AzureTargetSite {
                RawSite = siteAndMaybeSlotName
            };

            if (siteAndMaybeSlotName.Contains("("))
            {
                // legacy site and slot "site(slot)"
                var parenthesesIndex = siteAndMaybeSlotName.IndexOf("(", StringComparison.Ordinal);
                targetSite.Site = siteAndMaybeSlotName.Substring(0, parenthesesIndex).Trim();
                targetSite.Slot = siteAndMaybeSlotName.Substring(parenthesesIndex + 1).Replace(")", string.Empty).Trim();
                return(targetSite);
            }

            if (siteAndMaybeSlotName.Contains("/"))
            {
                // "site/slot"
                var slashIndex = siteAndMaybeSlotName.IndexOf("/", StringComparison.Ordinal);
                targetSite.Site = siteAndMaybeSlotName.Substring(0, slashIndex).Trim();
                targetSite.Slot = siteAndMaybeSlotName.Substring(slashIndex + 1).Trim();
                return(targetSite);
            }

            targetSite.Site = siteAndMaybeSlotName;
            targetSite.Slot = slotName;
            return(targetSite);
        }
        private static string BuildPath(AzureTargetSite site, VariableDictionary variables)
        {
            var relativePath = (variables.Get(SpecialVariables.Action.Azure.PhysicalPath) ?? "").TrimStart('\\');

            return(relativePath != ""
                ? site.Site + "\\" + relativePath
                : site.Site);
        }
        string BuildPath(AzureTargetSite site, IVariables variables)
        {
            var relativePath = variables.Get(SpecialVariables.Action.Azure.PhysicalPath, String.Empty).TrimStart('\\');

            return(relativePath != String.Empty
                ? site.Site + "\\" + relativePath
                : site.Site);
        }
Пример #4
0
        private static void DeployToAzure(RunningDeployment deployment, AzureTargetSite targetSite,
                                          CalamariVariableDictionary variables,
                                          WebDeployPublishSettings publishSettings)
        {
            var retry = AzureRetryTracker.GetDefaultRetryTracker();

            while (retry.Try())
            {
                try
                {
                    Log.Verbose($"Using site '{targetSite.Site}'");
                    Log.Verbose($"Using slot '{targetSite.Slot}'");
                    var changeSummary = DeploymentManager
                                        .CreateObject("contentPath", deployment.CurrentDirectory)
                                        .SyncTo(
                        "contentPath",
                        BuildPath(targetSite, variables),
                        DeploymentOptions(publishSettings),
                        DeploymentSyncOptions(variables)
                        );

                    Log.Info(
                        "Successfully deployed to Azure. {0} objects added. {1} objects updated. {2} objects deleted.",
                        changeSummary.ObjectsAdded, changeSummary.ObjectsUpdated, changeSummary.ObjectsDeleted);
                    break;
                }
                catch (DeploymentDetailedException ex)
                {
                    if (retry.CanRetry())
                    {
                        if (retry.ShouldLogWarning())
                        {
                            Log.VerboseFormat("Retry #{0} on Azure deploy. Exception: {1}", retry.CurrentTry,
                                              ex.Message);
                        }

                        Thread.Sleep(retry.Sleep());
                    }
                    else
                    {
                        throw;
                    }
                }
            }
        }
        private static DeploymentBaseOptions DeploymentOptions(AzureTargetSite targetSite, SitePublishProfile publishProfile)
        {
            var options = new DeploymentBaseOptions
            {
                AuthenticationType = "Basic",
                RetryAttempts      = 3,
                RetryInterval      = 1000,
                TraceLevel         = TraceLevel.Verbose,
                UserName           = publishProfile.UserName,
                Password           = publishProfile.Password,
                UserAgent          = "OctopusDeploy/1.0",
                ComputerName       = new Uri(publishProfile.Uri, $"/msdeploy.axd?site={targetSite.Site}").ToString()
            };

            options.Trace += (sender, eventArgs) => LogDeploymentEvent(eventArgs);

            return(options);
        }