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); } }
/// <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); }