Example #1
0
        public ActionResult SaveDacpacStep(DacpacDeploymentStepModel model)
        {
            this.CheckPermission(UserRoleAction.DeploymentChangeSteps);

            if (!this.ModelState.IsValid)
            {
                return(this.View("EditDacpacStep", model));
            }

            DeploymentStep deploymentStep = this.GetDeploymentStep(model, DeploymentStepType.DeployDacpac);

            deploymentStep.SetStringProperty("Step.Title", model.StepTitle);
            deploymentStep.SetStringProperty("ConnectionString", model.ConnectionString);
            deploymentStep.SetStringProperty("TargetDatabase", model.TargetDatabase);
            deploymentStep.SetStringProperty("CustomConfiguration", model.CustomConfiguration);
            deploymentStep.SetStringProperty("ProjectId", model.ProjectId.ToString());

            this.UpdateProjectReference(model);
            this.SaveRoles(model, deploymentStep);
            this.Entities.SaveChanges();

            return(this.RedirectToAction("VersionDeployment", "Bundles", new { id = deploymentStep.BundleVersionId }));
        }
Example #2
0
        public ActionResult AddStep(int id, DeploymentStepType deploymentStepType = DeploymentStepType.Undefined)
        {
            this.CheckPermission(UserRoleAction.DeploymentChangeSteps);

            BundleVersion bundleVersion = this.Entities.BundleVersion
                                          .Include("DeploymentSteps")
                                          .First(bv => bv.Id == id);

            List <MachineRole> machineRoles = this.Entities.MachineRole.ToList();

            this.ViewBag.BundleVersion = bundleVersion;
            this.ViewBag.MachineRoles  = machineRoles;

            if (deploymentStepType == DeploymentStepType.Undefined)
            {
                return(this.View("AddStep"));
            }

            this.ViewBag.DeploymentStep = new DeploymentStep();

            if (deploymentStepType == DeploymentStepType.DeployWebSite)
            {
                this.ViewBag.ProjectsSelect = this.Entities.SourceControlVersion
                                              .SelectMany(scv => scv.ProjectVersions)
                                              .Where(pv => pv.ProjectType.HasFlag(ProjectType.Web) && !pv.Project.Properties.Any(p => p.Key == "NotForDeployment" && p.Value == "true"))
                                              .Select(pv => new SelectListItem
                {
                    Text  = pv.SourceControlVersion.SourceControl.Name + " / " + pv.SourceControlVersion.Name + " / " + pv.Name,
                    Value = pv.Id.ToString()
                })
                                              .OrderBy(sli => sli.Text)
                                              .ToList();

                WebSiteDeploymentStepModel model = new WebSiteDeploymentStepModel
                {
                    BundleVersionId = bundleVersion.Id
                };

                return(this.View("EditWebsiteStep", model));
            }

            if (deploymentStepType == DeploymentStepType.DeployDacpac)
            {
                this.ViewBag.ProjectsSelect = this.Entities.SourceControlVersion
                                              .SelectMany(scv => scv.ProjectVersions)
                                              .Where(pv => pv.ProjectType.HasFlag(ProjectType.Database) && !pv.Project.Properties.Any(p => p.Key == "NotForDeployment" && p.Value == "true"))
                                              .Select(pv => new SelectListItem
                {
                    Text  = pv.SourceControlVersion.SourceControl.Name + " / " + pv.SourceControlVersion.Name + " / " + pv.Name,
                    Value = pv.Id.ToString()
                })
                                              .OrderBy(sli => sli.Text)
                                              .ToList();

                DacpacDeploymentStepModel model = new DacpacDeploymentStepModel
                {
                    BundleVersionId = bundleVersion.Id
                };

                return(this.View("EditDacpacStep", model));
            }

            if (deploymentStepType == DeploymentStepType.CopyFiles)
            {
                this.ViewBag.ProjectsSelect = this.Entities.SourceControlVersion
                                              .SelectMany(scv => scv.ProjectVersions)
                                              .Where(pv => pv.ProjectType.HasFlag(ProjectType.ZipArchive) || pv.ProjectType.HasFlag(ProjectType.GulpFile))
                                              .Where(pv => !pv.Project.Properties.Any(p => p.Key == "NotForDeployment" && p.Value == "true"))
                                              .Select(pv => new SelectListItem
                {
                    Text  = pv.SourceControlVersion.SourceControl.Name + " / " + pv.SourceControlVersion.Name + " / " + pv.Name,
                    Value = pv.Id.ToString()
                })
                                              .OrderBy(sli => sli.Text)
                                              .ToList();

                ZipArchiveDeploymentStepModel model = new ZipArchiveDeploymentStepModel
                {
                    BundleVersionId = bundleVersion.Id
                };

                return(this.View("EditZipArchiveStep", model));
            }

            if (deploymentStepType == DeploymentStepType.UpdateHostsFile)
            {
                HostsDeploymentStepModel model = new HostsDeploymentStepModel
                {
                    BundleVersionId = bundleVersion.Id
                };

                return(this.View("EditHostsStep", model));
            }

            if (deploymentStepType == DeploymentStepType.RunSQLScript)
            {
                SqlScriptDeploymentStepModel model = new SqlScriptDeploymentStepModel
                {
                    BundleVersionId = bundleVersion.Id
                };

                return(this.View("EditSqlScriptStep", model));
            }

            if (deploymentStepType == DeploymentStepType.Configuration)
            {
                ConfigDeploymentStepModel model = new ConfigDeploymentStepModel
                {
                    BundleVersionId = bundleVersion.Id
                };

                return(this.View("EditConfigStep", model));
            }

            if (deploymentStepType == DeploymentStepType.RunVsTests)
            {
                this.ViewBag.ProjectsSelect = this.Entities.SourceControlVersion
                                              .SelectMany(scv => scv.ProjectVersions)
                                              .Where(pv => pv.ProjectType.HasFlag(ProjectType.Test) && !pv.Project.Properties.Any(p => p.Key == "NotForDeployment" && p.Value == "true"))
                                              .Select(pv => new SelectListItem
                {
                    Text  = pv.SourceControlVersion.SourceControl.Name + " / " + pv.SourceControlVersion.Name + " / " + pv.Name,
                    Value = pv.Id.ToString()
                })
                                              .OrderBy(sli => sli.Text)
                                              .ToList();

                RunVsTestStepModel model = new RunVsTestStepModel
                {
                    BundleVersionId = bundleVersion.Id
                };

                return(this.View("EditRunTestStep", model));
            }

            throw new AspNetDeployException("Invalid deployment step type");
        }
Example #3
0
        public ActionResult EditStep(int id, int deploymentStepId)
        {
            this.CheckPermission(UserRoleAction.DeploymentChangeSteps);

            DeploymentStep deploymentStep = this.Entities.DeploymentStep
                                            .Include("Properties")
                                            .Include("MachineRoles")
                                            .Include("BundleVersion.Bundle")
                                            .First(ds => ds.Id == deploymentStepId && ds.BundleVersion.Id == id);

            List <MachineRole> machineRoles = this.Entities.MachineRole.ToList();

            this.ViewBag.DeploymentStep = deploymentStep;
            this.ViewBag.BundleVersion  = deploymentStep.BundleVersion;
            this.ViewBag.MachineRoles   = machineRoles;

            if (deploymentStep.Type == DeploymentStepType.DeployWebSite)
            {
                WebSiteDeploymentStepModel model = new WebSiteDeploymentStepModel
                {
                    OrderIndex       = deploymentStep.OrderIndex,
                    DeploymentStepId = deploymentStepId,
                    BundleVersionId  = deploymentStep.BundleVersionId,
                    SiteName         = deploymentStep.GetStringProperty("IIS.SiteName"),
                    ProjectId        = deploymentStep.GetIntProperty("ProjectId"),
                    Destination      = deploymentStep.GetStringProperty("IIS.DestinationPath"),
                    Roles            = string.Join(", ", deploymentStep.MachineRoles.Select(mr => mr.Name)),
                    BindingsJson     = deploymentStep.GetStringProperty("IIS.Bindings")
                };

                this.ViewBag.ProjectsSelect = this.Entities.SourceControlVersion
                                              .SelectMany(scv => scv.ProjectVersions)
                                              .Where(pv => pv.ProjectType.HasFlag(ProjectType.Web) && !pv.Project.Properties.Any(p => p.Key == "NotForDeployment" && p.Value == "true"))
                                              .Select(pv => new SelectListItem
                {
                    Text  = pv.SourceControlVersion.SourceControl.Name + " / " + pv.SourceControlVersion.Name + " / " + pv.Name,
                    Value = pv.Id.ToString()
                })
                                              .OrderBy(sli => sli.Text)
                                              .ToList();

                return(this.View("EditWebsiteStep", model));
            }
            if (deploymentStep.Type == DeploymentStepType.CopyFiles)
            {
                ZipArchiveDeploymentStepModel model = new ZipArchiveDeploymentStepModel
                {
                    OrderIndex              = deploymentStep.OrderIndex,
                    DeploymentStepId        = deploymentStepId,
                    BundleVersionId         = deploymentStep.BundleVersionId,
                    StepTitle               = deploymentStep.GetStringProperty("Step.Title"),
                    ProjectId               = deploymentStep.GetIntProperty("ProjectId"),
                    Destination             = deploymentStep.GetStringProperty("DestinationPath"),
                    Roles                   = string.Join(", ", deploymentStep.MachineRoles.Select(mr => mr.Name)),
                    CustomConfigurationJson = deploymentStep.GetStringProperty("CustomConfiguration")
                };

                this.ViewBag.ProjectsSelect = this.Entities.SourceControlVersion
                                              .SelectMany(scv => scv.ProjectVersions)
                                              .Where(pv => pv.ProjectType.HasFlag(ProjectType.ZipArchive) || pv.ProjectType.HasFlag(ProjectType.GulpFile))
                                              .Where(pv => !pv.Project.Properties.Any(p => p.Key == "NotForDeployment" && p.Value == "true"))
                                              .Select(pv => new SelectListItem
                {
                    Text  = pv.SourceControlVersion.SourceControl.Name + " / " + pv.SourceControlVersion.Name + " / " + pv.Name,
                    Value = pv.Id.ToString()
                })
                                              .OrderBy(sli => sli.Text)
                                              .ToList();

                return(this.View("EditZipArchiveStep", model));
            }

            if (deploymentStep.Type == DeploymentStepType.Configuration)
            {
                ConfigDeploymentStepModel model = new ConfigDeploymentStepModel
                {
                    OrderIndex       = deploymentStep.OrderIndex,
                    BundleVersionId  = deploymentStep.BundleVersionId,
                    DeploymentStepId = deploymentStepId,
                    ConfigJson       = deploymentStep.GetStringProperty("SetValues"),
                    StepTitle        = deploymentStep.GetStringProperty("Step.Title"),
                    File             = deploymentStep.GetStringProperty("File"),
                    Roles            = string.Join(", ", deploymentStep.MachineRoles.Select(mr => mr.Name))
                };

                return(this.View("EditConfigStep", model));
            }

            if (deploymentStep.Type == DeploymentStepType.RunSQLScript)
            {
                SqlScriptDeploymentStepModel model = new SqlScriptDeploymentStepModel
                {
                    OrderIndex       = deploymentStep.OrderIndex,
                    BundleVersionId  = deploymentStep.BundleVersionId,
                    DeploymentStepId = deploymentStepId,
                    Roles            = string.Join(", ", deploymentStep.MachineRoles.Select(mr => mr.Name)),
                    ConnectionString = deploymentStep.GetStringProperty("ConnectionString"),
                    StepTitle        = deploymentStep.GetStringProperty("Step.Title"),
                    Command          = deploymentStep.GetStringProperty("Command")
                };

                return(this.View("EditSqlScriptStep", model));
            }

            if (deploymentStep.Type == DeploymentStepType.UpdateHostsFile)
            {
                HostsDeploymentStepModel model = new HostsDeploymentStepModel
                {
                    OrderIndex       = deploymentStep.OrderIndex,
                    BundleVersionId  = deploymentStep.BundleVersionId,
                    DeploymentStepId = deploymentStepId,
                    Roles            = string.Join(", ", deploymentStep.MachineRoles.Select(mr => mr.Name)),
                    StepTitle        = deploymentStep.GetStringProperty("Step.Title"),
                    ConfigJson       = deploymentStep.GetStringProperty("ConfigurationJson")
                };

                return(this.View("EditHostsStep", model));
            }

            if (deploymentStep.Type == DeploymentStepType.DeployDacpac)
            {
                DacpacDeploymentStepModel model = new DacpacDeploymentStepModel
                {
                    OrderIndex          = deploymentStep.OrderIndex,
                    BundleVersionId     = deploymentStep.BundleVersionId,
                    DeploymentStepId    = deploymentStepId,
                    Roles               = string.Join(", ", deploymentStep.MachineRoles.Select(mr => mr.Name)),
                    StepTitle           = deploymentStep.GetStringProperty("Step.Title"),
                    ProjectId           = deploymentStep.GetIntProperty("ProjectId"),
                    ConnectionString    = deploymentStep.GetStringProperty("ConnectionString"),
                    TargetDatabase      = deploymentStep.GetStringProperty("TargetDatabase"),
                    CustomConfiguration = deploymentStep.GetStringProperty("CustomConfiguration")
                };

                this.ViewBag.ProjectsSelect = this.Entities.SourceControlVersion
                                              .SelectMany(scv => scv.ProjectVersions)
                                              .Where(pv => pv.ProjectType.HasFlag(ProjectType.Database) && !pv.Project.Properties.Any(p => p.Key == "NotForDeployment" && p.Value == "true"))
                                              .Select(pv => new SelectListItem
                {
                    Text  = pv.SourceControlVersion.SourceControl.Name + " / " + pv.SourceControlVersion.Name + " / " + pv.Name,
                    Value = pv.Id.ToString()
                })
                                              .OrderBy(sli => sli.Text)
                                              .ToList();

                return(this.View("EditDacpacStep", model));
            }

            if (deploymentStep.Type == DeploymentStepType.RunVsTests)
            {
                RunVsTestStepModel model = new RunVsTestStepModel
                {
                    OrderIndex       = deploymentStep.OrderIndex,
                    BundleVersionId  = deploymentStep.BundleVersionId,
                    DeploymentStepId = deploymentStepId,
                    Roles            = string.Join(", ", deploymentStep.MachineRoles.Select(mr => mr.Name)),
                    StepTitle        = deploymentStep.GetStringProperty("Step.Title"),
                    ProjectId        = deploymentStep.GetIntProperty("ProjectId"),
                    FiltersJson      = deploymentStep.GetStringProperty("FiltersJson"),
                    StopOnFailure    = deploymentStep.GetBoolProperty("StopOnFailure")
                };

                this.ViewBag.ProjectsSelect = this.Entities.SourceControlVersion
                                              .SelectMany(scv => scv.ProjectVersions)
                                              .Where(pv => pv.ProjectType.HasFlag(ProjectType.Test) && !pv.Project.Properties.Any(p => p.Key == "NotForDeployment" && p.Value == "true"))
                                              .Select(pv => new SelectListItem
                {
                    Text  = pv.SourceControlVersion.SourceControl.Name + " / " + pv.SourceControlVersion.Name + " / " + pv.Name,
                    Value = pv.Id.ToString()
                })
                                              .OrderBy(sli => sli.Text)
                                              .ToList();

                return(this.View("EditRunTestStep", model));
            }

            return(this.Content("Unsupported step type"));
        }