Esempio n. 1
0
        public void Deploy(Guid deploymentId, Guid uniqueClientId, string requesterIdentity, DeploymentInfo deploymentInfoDto)
        {
            try
            {
                Guard.NotEmpty(deploymentId, "deploymentId");
                Guard.NotEmpty(uniqueClientId, "uniqueClientId");
                Guard.NotNullNorEmpty(requesterIdentity, "requesterIdentity");
                Guard.NotNull(deploymentInfoDto, "DeploymentInfo");

                ProjectInfo projectInfo =
                    _projectInfoRepository.FindByName(deploymentInfoDto.ProjectName);

                if (projectInfo == null)
                {
                    throw new FaultException <ProjectNotFoundFault>(new ProjectNotFoundFault {
                        ProjectName = deploymentInfoDto.ProjectName
                    });
                }

                Core.Domain.DeploymentInfo deploymentInfo =
                    DtoMapper.ConvertDeploymentInfo(deploymentInfoDto, projectInfo);

                DoDeploy(uniqueClientId, requesterIdentity, deploymentInfo, projectInfo);
            }
            catch (Exception exc)
            {
                HandleDeploymentException(exc, uniqueClientId);
            }
        }
Esempio n. 2
0
        private void DoDeploy(Guid uniqueClientId, string requesterIdentity, Core.Domain.DeploymentInfo deploymentInfo, ProjectInfo projectInfo)
        {
            DeploymentTask deploymentTask = projectInfo.CreateDeploymentTask(ObjectFactory.Instance);

            Core.Domain.DeploymentInfo deployInfo = OverwriteConfigurationIfSelfDeployment(deploymentInfo, projectInfo);

            StartTask(deploymentTask, uniqueClientId, requesterIdentity, deployInfo);
        }
Esempio n. 3
0
        private Core.Domain.DeploymentInfo OverwriteConfigurationIfSelfDeployment(Core.Domain.DeploymentInfo deploymentInfo, ProjectInfo projectInfo)
        {
            if (projectInfo is UberDeployerAgentProjectInfo)
            {
                return(new Core.Domain.DeploymentInfo(
                           deploymentInfo.DeploymentId,
                           deploymentInfo.IsSimulation,
                           deploymentInfo.ProjectName,
                           deploymentInfo.ProjectConfigurationName,
                           deploymentInfo.ProjectConfigurationBuildId,
                           _applicationConfiguration.AgentServiceEnvironmentName,
                           deploymentInfo.InputParams));
            }

            return(deploymentInfo);
        }
Esempio n. 4
0
        private void DoCreatePackage(Guid uniqueClientId, string requesterIdentity, DeploymentInfo deploymentInfoDto, ProjectInfo projectInfo, string packageDirPath)
        {
            var deploymentTask =
                new CreateManualDeploymentPackageDeploymentTask(
                    ObjectFactory.Instance.CreateProjectInfoRepository(),
                    ObjectFactory.Instance.CreateEnvironmentInfoRepository(),
                    ObjectFactory.Instance.CreateArtifactsRepository(),
                    ObjectFactory.Instance.CreateDirectoryAdapter(),
                    ObjectFactory.Instance.CreateFileAdapter(),
                    ObjectFactory.Instance.CreateZipFileAdapter(),
                    packageDirPath);

            Core.Domain.DeploymentInfo deploymentInfo =
                DtoMapper.ConvertDeploymentInfo(deploymentInfoDto, projectInfo);

            StartTask(deploymentTask, uniqueClientId, requesterIdentity, deploymentInfo);
        }
Esempio n. 5
0
        private IEnumerable<ProjectDeploymentData> CreateProjectEnvironmentDeployments(Guid uniqueClientId, EnvironmentDeployInfo environmentDeployInfo, IEnumerable<ProjectToDeploy> projects)
        {
            var projectDeployments = new List<ProjectDeploymentData>();
              var priorityProjectDeplyoments = new List<ProjectDeploymentData>();

              EnvironmentInfo environmentInfo = _environmentInfoRepository.FindByName(environmentDeployInfo.TargetEnvironment);

              if (environmentInfo == null)
              {
            throw new FaultException<EnvironmentNotFoundFault>(new EnvironmentNotFoundFault { EnvironmentName = environmentDeployInfo.TargetEnvironment });
              }

              foreach (var projectToDeploy in projects)
              {
            try
            {
              ProjectInfo projectInfo = _projectInfoRepository.FindByName(projectToDeploy.ProjectName);

              if (projectInfo == null)
              {
            throw new DeploymentTaskException(string.Format("Not found configuration for project: {0}", projectToDeploy.ProjectName));
              }

              ProjectConfigurationBuild lastSuccessfulBuild = GetLatestSuccessfulBuild(projectToDeploy.ProjectName, environmentDeployInfo.BuildConfigurationName);

              if (lastSuccessfulBuild == null)
              {
            throw new DeploymentTaskException(string.Format("Successful build not found for project: {0} and configuration: {1}", projectToDeploy, environmentDeployInfo.BuildConfigurationName));
              }

              InputParams inputParams = BuildInputParams(projectInfo, environmentInfo);

              var deploymentInfo = new Core.Domain.DeploymentInfo(projectToDeploy.DeploymentId, false, projectToDeploy.ProjectName, environmentDeployInfo.BuildConfigurationName, lastSuccessfulBuild.Id, environmentDeployInfo.TargetEnvironment, inputParams);

              DeploymentTask deploymentTask;

              // TODO LK: could replace below code with factory
              if (projectInfo.Type == ProjectType.Db)
              {
            DeploymentTask dropDbProjectDeploymentTask = new DropDbProjectDeploymentTask(
              ObjectFactory.Instance.CreateProjectInfoRepository(),
              ObjectFactory.Instance.CreateEnvironmentInfoRepository(),
              ObjectFactory.Instance.CreateDbManagerFactory());

            priorityProjectDeplyoments.Add(new ProjectDeploymentData(deploymentInfo, projectInfo, dropDbProjectDeploymentTask));

            deploymentTask =
              new DeployDbProjectDeploymentTask(
                ObjectFactory.Instance.CreateProjectInfoRepository(),
                ObjectFactory.Instance.CreateEnvironmentInfoRepository(),
                ObjectFactory.Instance.CreateArtifactsRepository(),
                ObjectFactory.Instance.CreateDbScriptRunnerFactory(),
                ObjectFactory.Instance.CreateDbVersionProvider(),
                ObjectFactory.Instance.CreateFileAdapter(),
                ObjectFactory.Instance.CreateZipFileAdapter(),
                ObjectFactory.Instance.CreateScriptsToRunWebSelectorForEnvironmentDeploy(),
                ObjectFactory.Instance.CreateMsSqlDatabasePublisher(),
                ObjectFactory.Instance.CreateDbManagerFactory(),
                ObjectFactory.Instance.CreateUserNameNormalizer(),
                ObjectFactory.Instance.CreateDirectoryAdapter());
              }
              else if (projectInfo.Type == ProjectType.NtService)
              {
            deploymentTask = new DeployNtServiceDeploymentTask(
              ObjectFactory.Instance.CreateProjectInfoRepository(),
              ObjectFactory.Instance.CreateEnvironmentInfoRepository(),
              ObjectFactory.Instance.CreateArtifactsRepository(),
              ObjectFactory.Instance.CreateNtServiceManager(),
              ObjectFactory.Instance.CreatePasswordCollector(),
              ObjectFactory.Instance.CreateFailoverClusterManager(),
              ObjectFactory.Instance.CreateDirectoryAdapter(),
              ObjectFactory.Instance.CreateFileAdapter(),
              ObjectFactory.Instance.CreateZipFileAdapter())
            {
              UseLocalSystemUser = true
            };
              }
              else
              {
            deploymentTask = projectInfo.CreateDeploymentTask(ObjectFactory.Instance);
              }

              projectDeployments.Add(new ProjectDeploymentData(deploymentInfo, projectInfo, deploymentTask));
            }
            catch (Exception e)
            {
              LogMessage(uniqueClientId, DiagnosticMessageType.Error, e.Message);
            }
              }

              priorityProjectDeplyoments.AddRange(projectDeployments);

              return priorityProjectDeplyoments;
        }
Esempio n. 6
0
        private void StartTask(DeploymentTask deploymentTask, Guid uniqueClientId, string requesterIdentity, Core.Domain.DeploymentInfo deploymentInfo)
        {
            var deploymentContext =
                new DeploymentContext(requesterIdentity);

            EventHandler <DiagnosticMessageEventArgs> deploymentPipelineDiagnosticMessageAction =
                (eventSender, tmpArgs) => LogMessage(uniqueClientId, tmpArgs.MessageType, tmpArgs.Message);

            try
            {
                _deploymentPipeline.DiagnosticMessagePosted += deploymentPipelineDiagnosticMessageAction;

                _deploymentPipeline.StartDeployment(deploymentInfo, deploymentTask, deploymentContext, _applicationConfiguration.DeployDependentProjects);
            }
            finally
            {
                _deploymentPipeline.DiagnosticMessagePosted -= deploymentPipelineDiagnosticMessageAction;
            }
        }
Esempio n. 7
0
        private IEnumerable <ProjectDeploymentData> CreateProjectEnvironmentDeployments(Guid uniqueClientId, EnvironmentDeployInfo environmentDeployInfo, IEnumerable <ProjectToDeploy> projects)
        {
            var projectDeployments         = new List <ProjectDeploymentData>();
            var priorityProjectDeplyoments = new List <ProjectDeploymentData>();

            EnvironmentInfo environmentInfo = _environmentInfoRepository.FindByName(environmentDeployInfo.TargetEnvironment);

            if (environmentInfo == null)
            {
                throw new FaultException <EnvironmentNotFoundFault>(new EnvironmentNotFoundFault {
                    EnvironmentName = environmentDeployInfo.TargetEnvironment
                });
            }

            foreach (var projectToDeploy in projects)
            {
                try
                {
                    ProjectInfo projectInfo = _projectInfoRepository.FindByName(projectToDeploy.ProjectName);

                    if (projectInfo == null)
                    {
                        throw new DeploymentTaskException(string.Format("Not found configuration for project: {0}", projectToDeploy.ProjectName));
                    }

                    ProjectConfigurationBuild lastSuccessfulBuild = GetLatestSuccessfulBuild(projectToDeploy.ProjectName, environmentDeployInfo.BuildConfigurationName);

                    if (lastSuccessfulBuild == null)
                    {
                        throw new DeploymentTaskException(string.Format("Successful build not found for project: {0} and configuration: {1}", projectToDeploy, environmentDeployInfo.BuildConfigurationName));
                    }

                    InputParams inputParams = BuildInputParams(projectInfo, environmentInfo);

                    var deploymentInfo = new Core.Domain.DeploymentInfo(projectToDeploy.DeploymentId, false, projectToDeploy.ProjectName, environmentDeployInfo.BuildConfigurationName, lastSuccessfulBuild.Id, environmentDeployInfo.TargetEnvironment, inputParams);

                    DeploymentTask deploymentTask;

                    // TODO LK: could replace below code with factory
                    if (projectInfo.Type == ProjectType.Db)
                    {
                        DeploymentTask dropDbProjectDeploymentTask = new DropDbProjectDeploymentTask(
                            ObjectFactory.Instance.CreateProjectInfoRepository(),
                            ObjectFactory.Instance.CreateEnvironmentInfoRepository(),
                            ObjectFactory.Instance.CreateDbManagerFactory());

                        priorityProjectDeplyoments.Add(new ProjectDeploymentData(deploymentInfo, projectInfo, dropDbProjectDeploymentTask));

                        deploymentTask =
                            new DeployDbProjectDeploymentTask(
                                ObjectFactory.Instance.CreateProjectInfoRepository(),
                                ObjectFactory.Instance.CreateEnvironmentInfoRepository(),
                                ObjectFactory.Instance.CreateArtifactsRepository(),
                                ObjectFactory.Instance.CreateDbScriptRunnerFactory(),
                                ObjectFactory.Instance.CreateDbVersionProvider(),
                                ObjectFactory.Instance.CreateFileAdapter(),
                                ObjectFactory.Instance.CreateZipFileAdapter(),
                                ObjectFactory.Instance.CreateScriptsToRunWebSelectorForEnvironmentDeploy(),
                                ObjectFactory.Instance.CreateMsSqlDatabasePublisher(),
                                ObjectFactory.Instance.CreateDbManagerFactory(),
                                ObjectFactory.Instance.CreateUserNameNormalizer(),
                                ObjectFactory.Instance.CreateDirectoryAdapter());
                    }
                    else if (projectInfo.Type == ProjectType.NtService)
                    {
                        deploymentTask = new DeployNtServiceDeploymentTask(
                            ObjectFactory.Instance.CreateProjectInfoRepository(),
                            ObjectFactory.Instance.CreateEnvironmentInfoRepository(),
                            ObjectFactory.Instance.CreateArtifactsRepository(),
                            ObjectFactory.Instance.CreateNtServiceManager(),
                            ObjectFactory.Instance.CreatePasswordCollector(),
                            ObjectFactory.Instance.CreateFailoverClusterManager(),
                            ObjectFactory.Instance.CreateDirectoryAdapter(),
                            ObjectFactory.Instance.CreateFileAdapter(),
                            ObjectFactory.Instance.CreateZipFileAdapter())
                        {
                            UseLocalSystemUser = true
                        };
                    }
                    else
                    {
                        deploymentTask = projectInfo.CreateDeploymentTask(ObjectFactory.Instance);
                    }

                    projectDeployments.Add(new ProjectDeploymentData(deploymentInfo, projectInfo, deploymentTask));
                }
                catch (Exception e)
                {
                    LogMessage(uniqueClientId, DiagnosticMessageType.Error, e.Message);
                }
            }

            priorityProjectDeplyoments.AddRange(projectDeployments);

            return(priorityProjectDeplyoments);
        }