示例#1
0
 public DeploymentService(DeploymentConfiguration configuration, DeploymentPipelineFactory pipelineFactory,
                          FileUploadHandlerFactory fileUploadHandler)
 {
     this.configuration     = configuration;
     this.pipeline          = pipelineFactory.Create(configuration.SSHLogin);
     this.fileUploadHandler = fileUploadHandler;
     powershellClient       = new PowershellClient();
 }
示例#2
0
        public void StartDeployment_WhenDeploymentTaskIsNull_ThrowsArgumentNullException()
        {
            var projectInfoRepositoryFake     = new Mock <IProjectInfoRepository>(MockBehavior.Loose);
            var environmentInfoRepositoryFake = new Mock <IEnvironmentInfoRepository>(MockBehavior.Loose);

            var pipeline = new DeploymentPipeline(_applicationConfigurationMock.Object, _objectFactoryMock.Object);

            var deploymentInfo = DeploymentInfoGenerator.GetNtServiceDeploymentInfo();

            Assert.Throws <ArgumentNullException>(() => pipeline.StartDeployment(null, new DummyDeploymentTask(projectInfoRepositoryFake.Object, environmentInfoRepositoryFake.Object), new DeploymentContext("requester"), false));
            Assert.Throws <ArgumentNullException>(() => pipeline.StartDeployment(deploymentInfo, null, new DeploymentContext("requester"), false));
            Assert.Throws <ArgumentNullException>(() => pipeline.StartDeployment(deploymentInfo, new DummyDeploymentTask(projectInfoRepositoryFake.Object, environmentInfoRepositoryFake.Object), null, false));
        }
示例#3
0
        public void AddModule_WhenModuleIsNull_ThrowsArgumentNullException()
        {
            var pipeline = new DeploymentPipeline(_applicationConfigurationMock.Object, _objectFactoryMock.Object);

            Assert.Throws <ArgumentNullException>(() => pipeline.AddModule(null));
        }
示例#4
0
        public static void Bootstrap(bool mockTeamCity = false)
        {
            var container = ObjectFactory.Container;

            container.Register(
                Component.For <IApplicationConfigurationRepository>()
                .UsingFactoryMethod(() => new XmlApplicationConfigurationRepository(_ApplicationConfigPath))
                .LifeStyle.Transient,

                Component.For <IApplicationConfiguration>()
                .UsingFactoryMethod((kernel) => kernel.Resolve <IApplicationConfigurationRepository>().LoadConfiguration())
                .LifeStyle.Singleton,

                Component.For <IProjectInfoRepository>()
                .UsingFactoryMethod(() => new XmlProjectInfoRepository(_ProjectInfosFilePath))
                .LifeStyle.Singleton,

                Component.For <IEnvironmentInfoRepository>()
                .UsingFactoryMethod(() => new XmlEnvironmentInfoRepository(_EnvironmentInfosDirPath))
                .LifeStyle.Singleton,

                Component.For <IEnvironmentDeployInfoRepository>()
                .UsingFactoryMethod(() => new JsonEnvironmentDeployInfoRepository(_EnvironmentDeployInfosDirPath))
                .LifeStyle.Singleton);

            container.Register(
                Component.For <IDirectoryAdapter>()
                .ImplementedBy <DirectoryAdapter>()
                .LifeStyle.Is(LifestyleType.Transient));

            container.Register(
                Component.For <ITeamCityClient>()
                .UsingFactoryMethod(
                    () =>
            {
                var appConfig = container.Resolve <IApplicationConfiguration>();

                var client = new TeamCityClient(
                    appConfig.TeamCityHostName,
                    appConfig.TeamCityPort,
                    appConfig.TeamCityUserName,
                    appConfig.TeamCityPassword);

                container.Release(appConfig);

                return(client);
            })
                .LifeStyle.Transient);

            container.Register(
                Component.For <ITeamCityRestClient>()
                .UsingFactoryMethod(
                    () =>
            {
                var appConfig = container.Resolve <IApplicationConfiguration>();

                ITeamCityRestClient restClient;
                if (mockTeamCity)
                {
                    restClient = new MockedTeamCityRestClient();
                }
                else
                {
                    restClient = new TeamCityRestClient(
                        new Uri(string.Format("http://{0}:{1}", appConfig.TeamCityHostName, appConfig.TeamCityPort)),
                        appConfig.TeamCityUserName,
                        appConfig.TeamCityPassword);
                }

                container.Release(appConfig);

                return(restClient);
            })
                .LifeStyle.Transient);

            container.Register(
                Component.For <IArtifactsRepository>().ImplementedBy <TeamCityArtifactsRepository>()
                .LifeStyle.Transient);

            container.Register(
                Component.For <IDeploymentRequestRepository>()
                .UsingFactoryMethod(() => new NHibernateDeploymentRequestRepository(SessionFactory))
                .LifeStyle.Transient);

            container.Register(
                Component.For <INtServiceManager>()
                .UsingFactoryMethod(
                    () =>
            {
                var appConfig = container.Resolve <IApplicationConfiguration>();

                return
                (new ScExeBasedNtServiceManager(
                     appConfig.ScExePath,
                     _NtServiceManagerOperationsTimeout));
            })
                .LifeStyle.Transient);

            container.Register(
                Component.For <ITaskScheduler>()
                .ImplementedBy <TaskScheduler>()
                .LifeStyle.Transient);

            // TODO IMM HI: config?
            container.Register(
                Component.For <IMsDeploy>()
                .UsingFactoryMethod(() => new MsDeploy(Path.Combine(_BaseDirPath, "msdeploy.exe")))
                .LifeStyle.Transient);

            // TODO IMM HI: config?
            container.Register(
                Component.For <IIisManager>()
                .UsingFactoryMethod(() => new MsDeployBasedIisManager(container.Resolve <IMsDeploy>()))
                .LifeStyle.Transient);

            // TODO IMM HI: config?
            container.Register(
                Component.For <IDeploymentPipeline>()
                .UsingFactoryMethod(
                    () =>
            {
                var deploymentRequestRepository = container.Resolve <IDeploymentRequestRepository>();
                var applicationConfiguration    = container.Resolve <IApplicationConfiguration>();
                var auditingModule = new AuditingModule(deploymentRequestRepository);
                var enforceTargetEnvironmentConstraintsModule = new EnforceTargetEnvironmentConstraintsModule();
                var deploymentPipeline = new DeploymentPipeline(applicationConfiguration, ObjectFactory.Instance);

                deploymentPipeline.AddModule(auditingModule);
                deploymentPipeline.AddModule(enforceTargetEnvironmentConstraintsModule);

                return(deploymentPipeline);
            })
                .LifeStyle.Transient);

            container.Register(
                Component.For <IEnvDeploymentPipeline>()
                .ImplementedBy <EnvDeploymentPipeline>()
                .LifeStyle.Transient);

            container.Register(
                Component.For <IDbManagerFactory>()
                .ImplementedBy <MsSqlDbManagerFactory>()
                .LifeStyle.Transient);

            container.Register(
                Component.For <IMsSqlDatabasePublisher>()
                .UsingFactoryMethod(
                    kernel =>
            {
                var applicationConfiguration = kernel.Resolve <IApplicationConfiguration>();
                var cmdExecutor = kernel.Resolve <ICmdExecutor>();

                return(new MsSqlDatabasePublisher(cmdExecutor, applicationConfiguration.SqlPackageDirPath));
            })
                .LifeStyle.Transient);

            container.Register(
                Component.For <ICmdExecutor>()
                .ImplementedBy <CmdExecutor>()
                .LifeStyle.Transient);

            container.Register(
                Component.For <IDbVersionProvider>()
                .UsingFactoryMethod(
                    () =>
            {
                // order is important - from more specific to less
                IEnumerable <DbVersionTableInfo> versionTableInfos =
                    new List <DbVersionTableInfo>
                {
                    new DbVersionTableInfo
                    {
                        TableName           = "VERSION",
                        VersionColumnName   = "dbVersion",
                        MigrationColumnName = "migrated"
                    },
                    new DbVersionTableInfo
                    {
                        TableName         = "VERSION",
                        VersionColumnName = "dbVersion"
                    },
                    new DbVersionTableInfo
                    {
                        TableName         = "VERSIONHISTORY",
                        VersionColumnName = "DBLabel"
                    }
                };

                return(new DbVersionProvider(versionTableInfos));
            })
                .LifeStyle.Transient);

            container.Register(
                Component.For <IProjectMetadataExplorer>()
                .ImplementedBy <ProjectMetadataExplorer>()
                .LifeStyle.Is(LifestyleType.Transient));

            container.Register(
                Component.For <IDirPathParamsResolver>()
                .UsingFactoryMethod(
                    () =>
            {
                var appConfig = container.Resolve <IApplicationConfiguration>();
                return(new DirPathParamsResolver(appConfig.ManualDeploymentPackageCurrentDateFormat));
            })
                .LifeStyle.Is(LifestyleType.Transient));

            container.Register(
                Component.For <IDbScriptRunnerFactory>()
                .ImplementedBy <MsSqlDbScriptRunnerFactory>()
                .LifeStyle.Is(LifestyleType.Transient));

            container.Register(
                Component.For <IUserNameNormalizer>()
                .ImplementedBy <UserNameNormalizer>()
                .LifeStyle.Transient);
        }
示例#5
0
        public IFileUploadHandler GetHandler(DeploymentPipeline pipeline)
        {
            IFileUploadHandler fileUploadHandler = new ZipPackageFileUploadHandler(pipeline);

            return(fileUploadHandler);
        }
示例#6
0
 public ZipPackageFileUploadHandler(DeploymentPipeline pipeline)
 {
     this.pipeline = pipeline;
 }