public void SetUp()
        {
            deployReleaseCommand = new DeployReleaseCommand(RepositoryFactory, Log, FileSystem);

            var project = new ProjectResource();
            var release = new ReleaseResource {
                Version = "1.0.0"
            };
            var releases = new ResourceCollection <ReleaseResource>(new[] { release }, new LinkCollection());
            var deploymentPromotionTarget = new DeploymentPromotionTarget {
                Name = "TestEnvironment"
            };
            var promotionTargets = new List <DeploymentPromotionTarget> {
                deploymentPromotionTarget
            };
            var deploymentTemplate = new DeploymentTemplateResource {
                PromoteTo = promotionTargets
            };
            var deploymentPreviewResource = new DeploymentPreviewResource {
                StepsToExecute = new List <DeploymentTemplateStep>()
            };
            var deployment = new DeploymentResource {
                TaskId = "1"
            };

            taskResource = new TaskResource();

            Repository.Projects.FindByName(ProjectName).Returns(project);
            Repository.Projects.GetReleases(project).Returns(releases);
            Repository.Releases.GetPreview(deploymentPromotionTarget).Returns(deploymentPreviewResource);
            Repository.Releases.GetTemplate(release).Returns(deploymentTemplate);
            Repository.Deployments.Create(Arg.Any <DeploymentResource>()).Returns(deployment);
            Repository.Tasks.Get(deployment.TaskId).Returns(taskResource);
        }
Beispiel #2
0
        public void SetUp()
        {
            deployReleaseCommand = new DeployReleaseCommand(RepositoryFactory, FileSystem, ClientFactory, CommandOutputProvider);

            var project = new ProjectResource();
            var release = new ReleaseResource {
                Version = "1.0.0"
            };
            var releases = new ResourceCollection <ReleaseResource>(new[] { release }, new LinkCollection());
            var deploymentPromotionTarget = new DeploymentPromotionTarget {
                Name = ValidEnvironment, Id = "Env-1"
            };
            var promotionTargets = new List <DeploymentPromotionTarget> {
                deploymentPromotionTarget
            };
            var tenantPromotionTarget1 = new DeploymentPromomotionTenant()
            {
                Id = "Tenant-1", PromoteTo = promotionTargets
            };
            var tenantPromotionTarget2 = new DeploymentPromomotionTenant()
            {
                Id = "Tenant-2", PromoteTo = new List <DeploymentPromotionTarget>()
            };
            var deploymentTemplate = new DeploymentTemplateResource {
                PromoteTo = promotionTargets, TenantPromotions = { tenantPromotionTarget1, tenantPromotionTarget2 }
            };
            var deploymentPreviewResource = new DeploymentPreviewResource {
                StepsToExecute = new List <DeploymentTemplateStep>()
            };
            var deployment = new DeploymentResource {
                TaskId = "Task-1"
            };

            taskResource = new TaskResource()
            {
                Id = "Task-1"
            };

            Repository.Projects.FindByName(ProjectName).Returns(project);
            Repository.Projects.GetReleases(project).Returns(releases);
            Repository.Releases.GetPreview(deploymentPromotionTarget).Returns(deploymentPreviewResource);
            Repository.Releases.GetTemplate(release).Returns(deploymentTemplate);
            Repository.Deployments.Create(Arg.Any <DeploymentResource>()).Returns(deployment);
            Repository.Tasks.Get(deployment.TaskId).Returns(taskResource);
            Repository.Tenants.Get(Arg.Is <string[]>(arg => arg.All(arg2 => arg2 == "Tenant-1" || arg2 == "Tenant-2")))
            .Returns(new List <TenantResource>()
            {
                new TenantResource()
                {
                    Id = "Tenant-1"
                },
                new TenantResource()
                {
                    Id = "Tenant-2"
                },
            });
        }
Beispiel #3
0
        private async Task <DeploymentResource> CreateDeploymentTask(ProjectResource project, ReleaseResource release, DeploymentPromotionTarget promotionTarget, ReferenceCollection specificMachineIds, TenantResource tenant = null)
        {
            var preview = await Repository.Releases.GetPreview(promotionTarget).ConfigureAwait(false);

            // Validate skipped steps
            var skip = new ReferenceCollection();

            foreach (var step in SkipStepNames)
            {
                var stepToExecute =
                    preview.StepsToExecute.SingleOrDefault(s => string.Equals(s.ActionName, step, StringComparison.CurrentCultureIgnoreCase));
                if (stepToExecute == null)
                {
                    Log.Warning("No step/action named '{Step:l}' could be found when deploying to environment '{Environment:l}', so the step cannot be skipped.", step, promotionTarget.Name);
                }
                else
                {
                    Log.Debug("Skipping step: {Step:l}", stepToExecute.ActionName);
                    skip.Add(stepToExecute.ActionId);
                }
            }

            // Validate form values supplied
            if (preview.Form != null && preview.Form.Elements != null && preview.Form.Values != null)
            {
                foreach (var element in preview.Form.Elements)
                {
                    var variableInput = element.Control as VariableValue;
                    if (variableInput == null)
                    {
                        continue;
                    }

                    var value = variables.Get(variableInput.Label) ?? variables.Get(variableInput.Name);

                    if (string.IsNullOrWhiteSpace(value) && element.IsValueRequired)
                    {
                        throw new ArgumentException("Please provide a variable for the prompted value " + variableInput.Label);
                    }

                    preview.Form.Values[element.Name] = value;
                }
            }

            // Log step with no machines
            foreach (var previewStep in preview.StepsToExecute)
            {
                if (previewStep.HasNoApplicableMachines)
                {
                    Log.Warning("Warning: there are no applicable machines roles used by step {Step:l}", previewStep.ActionName);
                }
            }

            var deployment = await Repository.Deployments.Create(new DeploymentResource
            {
                TenantId                 = tenant?.Id,
                EnvironmentId            = promotionTarget.Id,
                SkipActions              = skip,
                ReleaseId                = release.Id,
                ForcePackageDownload     = ForcePackageDownload,
                UseGuidedFailure         = UseGuidedFailure.GetValueOrDefault(preview.UseGuidedFailureModeByDefault),
                SpecificMachineIds       = specificMachineIds,
                ForcePackageRedeployment = ForcePackageRedeployment,
                FormValues               = (preview.Form ?? new Form()).Values,
                QueueTime                = DeployAt == null ? null : (DateTimeOffset?)DeployAt.Value
            })
                             .ConfigureAwait(false);

            Log.Information("Deploying {Project:l} {Release:} to: {PromotionTarget:l} {Tenant:l}(Guided Failure: {GuidedFailure:l})", project.Name, release.Version, promotionTarget.Name,
                            tenant == null ? string.Empty : $"for {tenant.Name} ",
                            deployment.UseGuidedFailure ? "Enabled" : "Not Enabled");

            return(deployment);
        }
Beispiel #4
0
 public Task <DeploymentPreviewResource> GetPreview(DeploymentPromotionTarget promotionTarget)
 {
     return(Client.Get <DeploymentPreviewResource>(promotionTarget.Link("Preview")));
 }
Beispiel #5
0
 public RunbookRunPreviewResource GetPreview(DeploymentPromotionTarget promotionTarget)
 {
     return(Client.Get <RunbookRunPreviewResource>(promotionTarget.Link("RunbookRunPreview")));
 }