Ejemplo n.º 1
0
        public static DeploymentResource CreateDeployment(OctoProject project, ReleaseResource release,
                                                          SingleProjectDeploymentSettings settings)
        {
            var client = WebClient.GetWebClientRef();

            // Check if the project has been disabled
            if (project.IsDisabled() || settings.Force || release == null)
            {
                return(null);
            }

            Console.WriteLine($"Starting to Create Deployment for {project.ProjectName}");
            // Update the variable set
            if (settings.UpdateVariableSetNow)
            {
                Console.WriteLine($"Update Release {release.Version} variables now");

                release = client.GetReleaseRepo().SnapshotVariables(release);
            }

            if (settings.NeedRebootAfterDeployment)
            {
                Console.WriteLine("Deployment Target Server(s) Will Reboot After Deployment");
                settings.WaitingForFinish = true;
            }

            //creating the deployment object
            var deployment = new DeploymentResource
            {
                ReleaseId          = release.Id,
                ProjectId          = project.GetProjectId(),
                EnvironmentId      = client.GetEnvironmentIdByName(settings.TargetEnvironmentName),
                SpecificMachineIds = settings.ConvertMachineNames(),
                Comments           = settings.Comments,
                UseGuidedFailure   = settings.UseGuidedFailure,
                SkipActions        = settings.ConvertSkipSteps()
            };

            // Schedule the deployment if deployment time is greater than now
            if (settings.DeployAt > DateTime.Now)
            {
                deployment.QueueTime      = new DateTimeOffset(settings.DeployAt);
                settings.WaitingForFinish = false;
            }

            deployment = client.GetDeploymentRepo().Create(deployment);

            Console.WriteLine($"{project.ProjectName} will {deployment.Name}");

            var task = new OctoTask(deployment);

            task.PrintCurrentState(settings.WaitingForFinish);

            if (!settings.NeedRebootAfterDeployment)
            {
                return(deployment);
            }
            var rolesNameList = project.GetTargetRolesNameList();
            var machines      = OctoMachines.GetMachinesByEnvName(settings.TargetEnvironmentName, rolesNameList);

            machines.RestartServer();

            return(deployment);
        }