Пример #1
0
        public bool Deploy(string taskId, IPackage package, CancellationTokenSource cancellationToken, Action<ProgressReport> reportProgress)
        {
            var unpackFolder = Path.Combine(AgentSettings.AgentProgramDataPath, _agentSettings.UnpackingLocation);
            var workingFolder = Path.Combine(unpackFolder, package.GetFullName());
            var targetInstallationFolder = Path.Combine(_agentSettings.BaseInstallationPath, package.Id);
            var deploymentContext = new DeploymentContext(package, workingFolder, targetInstallationFolder, taskId);

            var logger = deploymentContext.GetLoggerFor(this);
            var frameworks = package.GetSupportedFrameworks();
            foreach(var framework in frameworks)
            {
                logger.DebugFormat("package supports {0}", framework.FullName);
            }

            try
            {
                reportProgress(ProgressReport.Info(deploymentContext, this, package.Id, package.Version.Version.ToString(), taskId, "Extracting package to temp folder..."));
                new NuGetPackageExtractor().Extract(package, workingFolder);
            }
            catch (Exception ex)
            {
                logger.Fatal("Could not extract package", ex);
            }

            try
            {
                BeforeDeploy(deploymentContext, reportProgress);
                PerformDeploy(deploymentContext, reportProgress);
                AfterDeploy(deploymentContext, reportProgress);

                reportProgress(ProgressReport.Info(deploymentContext, this, package.Id, package.Version.Version.ToString(), taskId,
                                       "Deployment complete"));
                return true;
            }
            catch (Exception ex)
            {
                logger.Error("An error occurred", ex);
                reportProgress(ProgressReport.Error(deploymentContext, this, package.Id, package.Version.Version.ToString(), taskId,
                                       "Deployment failed", ex));
                return false;
            }
            finally
            {
                deploymentContext.RemoveAppender();
            }
        }