示例#1
0
        static void RunPackageInstall(string packagePath, string sitecoreUrl)
        {
            var hostUrl    = sitecoreUrl.LastIndexOf("/") != sitecoreUrl.Length - 1 ? sitecoreUrl + "/" : sitecoreUrl;
            var serviceUrl = string.Concat(hostUrl, Properties.Settings.Default.ServiceFolder, Properties.Settings.Default.ServiceFileName);

            using (var packageInstallService = new PackageInstall.PackageInstall())
            {
                packageInstallService.Url     = serviceUrl;
                packageInstallService.Timeout = Convert.ToInt32(timeout.TotalMilliseconds);

                WriteMessage("Initializing package install process | Package: {0} | Sitecore URL: {1}", packagePath, serviceUrl);

                var success    = false;
                var exceptions = new List <Exception>();

                for (int retry = 0; retry < maxRetries && !success; retry++)
                {
                    try
                    {
                        if (retry > 0)
                        {
                            WriteMessage("Waiting {0}m {1}s before attempting install again.", retryInterval.Minutes, retryInterval.Seconds);
                            Thread.Sleep(retryInterval);
                        }
                        else
                        {
                            WriteMessage("Starting package installation | Max Timeout: {0}m {1}s | Max Retries: {2}", timeout.Minutes, timeout.Seconds, maxRetries);
                        }

                        packageInstallService.InstallPackageAsync(packagePath);

                        var progress = packageInstallService.Check();

                        // The web service will sometimes report 0% complete instead of 100% shortly after a package installation finishes.
                        // Since we only check the progress once every 5 seconds, it is possible we'll miss the window where the service
                        // is reporting 100% complete.  This would result in a non-terminating loop.
                        // Therefore, we also track the maximum completion percentage seen thus far.
                        // If the current completion percentage ever drops to 0, but we've already seen higher percentages,
                        // we know the installation is actually complete.
                        var maximumProgress = progress.PercentageComplete;

                        WriteMessage("Package install progress {0}%", progress.PercentageComplete);

                        // Stop if we see 100% complete, or if we see PercentageComplete at 0% with a non-zero MaximumProgress.
                        while (progress.PercentageComplete < 100 && !(Math.Abs(progress.PercentageComplete) < 0.1 && maximumProgress > 0))
                        {
                            Thread.Sleep(TimeSpan.FromSeconds(5));
                            progress = packageInstallService.Check();

                            if (progress.PercentageComplete > maximumProgress)
                            {
                                maximumProgress = progress.PercentageComplete;
                            }

                            WriteMessage("Package install progress {0}%", progress.PercentageComplete);
                        }

                        success = true;
                    }
                    catch (TimeoutException ex)
                    {
                        WriteMessage("Failed to contact Sitecore instance, retrying ({0}).", retry + 1);
                        exceptions.Add(ex);
                    }
                    catch (Exception ex)
                    {
                        WriteMessage("An error has ocurred while trying to install the update package. Check the Sitecore log file for any exceptions.");
                        exceptions.Add(ex);
                        break;
                    }
                }

                if (!success)
                {
                    Environment.Exit(103);
                }

                WriteMessage("Update package installed successfully.");
            }
        }
示例#2
0
        static void RunPackageInstall(string packagePath, string sitecoreUrl)
        {
            var hostUrl = sitecoreUrl.LastIndexOf("/") != sitecoreUrl.Length - 1 ? sitecoreUrl + "/" : sitecoreUrl;
            var serviceUrl = string.Concat(hostUrl, Properties.Settings.Default.ServiceFolder, Properties.Settings.Default.ServiceFileName);

            using (var packageInstallService = new PackageInstall.PackageInstall())
            {
                packageInstallService.Url = serviceUrl;
                packageInstallService.Timeout = Convert.ToInt32(timeout.TotalMilliseconds);

                WriteMessage("Initializing package install process | Package: {0} | Sitecore URL: {1}", packagePath, serviceUrl);

                var success = false;
                var exceptions = new List<Exception>();

                for (int retry = 0; retry < maxRetries && !success; retry++)
                {
                    try
                    {
                        if (retry > 0)
                        {
                            WriteMessage("Waiting {0}m {1}s before attempting install again.", retryInterval.Minutes, retryInterval.Seconds);
                            Thread.Sleep(retryInterval);
                        }
                        else
                        {
                            WriteMessage("Starting package installation | Max Timeout: {0}m {1}s | Max Retries: {2}", timeout.Minutes, timeout.Seconds, maxRetries);
                        }

                        packageInstallService.InstallPackageAsync(packagePath);

                        var progress = packageInstallService.Check();

                        // The web service will sometimes report 0% complete instead of 100% shortly after a package installation finishes.
                        // Since we only check the progress once every 5 seconds, it is possible we'll miss the window where the service
                        // is reporting 100% complete.  This would result in a non-terminating loop.
                        // Therefore, we also track the maximum completion percentage seen thus far.
                        // If the current completion percentage ever drops to 0, but we've already seen higher percentages,
                        // we know the installation is actually complete.
                        var maximumProgress = progress.PercentageComplete;

                        WriteMessage("Package install progress {0}%", progress.PercentageComplete);

                        // Stop if we see 100% complete, or if we see PercentageComplete at 0% with a non-zero MaximumProgress.
                        while (progress.PercentageComplete < 100 && !(Math.Abs(progress.PercentageComplete) < 0.1 && maximumProgress > 0))
                        {
                            Thread.Sleep(TimeSpan.FromSeconds(5));
                            progress = packageInstallService.Check();

                            if (progress.PercentageComplete > maximumProgress)
                            {
                                maximumProgress = progress.PercentageComplete;
                            }

                            WriteMessage("Package install progress {0}%", progress.PercentageComplete);
                        }

                        success = true;
                    }
                    catch (TimeoutException ex)
                    {
                        WriteMessage("Failed to contact Sitecore instance, retrying ({0}).", retry + 1);
                        exceptions.Add(ex);
                    }
                    catch (Exception ex)
                    {
                        WriteMessage("An error has ocurred while trying to install the update package. Check the Sitecore log file for any exceptions.");
                        exceptions.Add(ex);
                        break;
                    }
                }

                if (!success)
                {
                    Environment.Exit(103);
                }

                WriteMessage("Update package installed successfully.");
            }
        }