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); } }
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); }
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); }
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); }
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; }
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; } }
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); }