Пример #1
0
        public void PromoteGroups()
        {
            var groups = Configs.Property("ProjectsGroupsToDeploy");

            if (groups == null)
            {
                return;
            }

            foreach (var g in groups.Value)
            {
                var name = g["Name"];

                if (name is null)
                {
                    continue;
                }
                Console.WriteLine($"Start to deploy ProjectsGroup {name}");
                var time     = g["DeployAt"];
                var settings = new GroupPromotingSettings
                {
                    SourceEnvironmentName = SourceEnvironmentName,

                    TargetEnvironmentName = TargetEnvironmentName,

                    SpecificMachineNames = g["SpecificMachineNames"]?.ToObject <string[]>() ?? new string[0],

                    ProjectsToExclude = g["ProjectsToExclude"]?.ToObject <string[]>() ?? new string[0],

                    SpecificProjectsToInclude = g["SpecificProjectsToInclude"]?.ToObject <string[]>() ?? new string[0],

                    WaitingForFinish = g["WaitingForFinish"]?.ToObject <bool>() ?? false,

                    UseGuidedFailure = g["UseGuidedFailure"]?.ToObject <bool>() ?? false,

                    UpdateVariableSetNow = g["UpdateVariableSetNow"]?.ToObject <bool>() ?? false,

                    Force = g["Force"]?.ToObject <bool>() ?? false,

                    DeployAt = time == null ? DateTime.Now  : DateTime.Parse(time.ToString())
                };
                ChainDeployments.PromoteProjectGroup(name.ToString(), settings);
            }
        }
Пример #2
0
        /// <summary>
        /// Deploy every project in a project group. It will promote releases of every project in the input group with
        /// given source Env to Target Env. By default, the deployment will start immediately, skip the projects are
        /// disabled and doesn't have the deployment at the input env and follow the alphabetical order of projects'
        /// name.
        /// The mandatory vars in settings are SourceEnvironmentName and TargetEnvironmentName
        /// </summary>
        /// <param name="groupName">The project group needed to be pushed</param>
        /// <param name="settings">Use GroupDeploymentSettings to pass special requirement. i.e. queue time</param>
        /// <returns>a list of the deploymentRecourse</returns>
        /// <exception cref="DeploymentSettingsMissingException">If one of Env name is missing</exception>
        public static List <DeploymentResource> PromoteProjectGroup(string groupName, GroupPromotingSettings
                                                                    settings)
        {
            var group       = WebClient.GetWebClientRef().GetGroupByName(groupName);
            var projects    = WebClient.GetWebClientRef().GetOctopusRepository().ProjectGroups.GetProjects(group);
            var deployments = new List <DeploymentResource>();

            if (settings.SourceEnvironmentName == null || settings.TargetEnvironmentName == null)
            {
                throw new DeploymentSettingsMissingException("Please make sure both envs name are set up");
            }

            if (settings.SpecificProjectsToInclude.Length == 0)
            {
                foreach (var project in projects)
                {
                    var projectName = project.Name;
                    if (!settings.ProjectsToExclude.Contains(projectName))
                    {
                        deployments.Add(Deployments.PromoteRelease(projectName, settings));
                    }
                }
            }
            else
            {
                foreach (var projectName in settings.SpecificProjectsToInclude)
                {
                    deployments.Add(Deployments.PromoteRelease(projectName, settings));
                }
            }

            return(deployments);
        }