private List <BuildDefinitionStep> AddTasks(TaskGroup tg) { var steps = new List <BuildDefinitionStep>(); foreach (var t in tg.Tasks) { var step = new BuildDefinitionStep { TimeoutInMinutes = t.TimeoutInMinutes, Condition = t.Condition, DisplayName = t.DisplayName, Environment = t.Environment, AlwaysRun = t.AlwaysRun, ContinueOnError = t.ContinueOnError, Enabled = t.Enabled, Inputs = t.Inputs, TaskDefinition = new Microsoft.TeamFoundation.Build.WebApi.TaskDefinitionReference { DefinitionType = t.Task.DefinitionType, Id = t.Task.Id, VersionSpec = t.Task.VersionSpec } }; steps.Add(step); } return(steps); }
public BuildDefinition CreateBuildDefinition(string project, NewBuild newBuild) { var branchState = _branchStateFactory.Create(newBuild.Branch); var taskState = _taskStateFactory.Create(project, newBuild, branchState); var buildName = taskState.GetBuildName(); var newDefinition = new BuildDefinition(); newDefinition.Name = buildName; newDefinition.Repository = new BuildRepository { CheckoutSubmodules = false, Clean = "true", DefaultBranch = branchState.DefaultBranch, Name = newBuild.Repo, Properties = { ["reportBuildStatus"] = "true", ["cleanOptions"] = "3" }, Type = "TfsGit" }; newDefinition.Queue = new AgentPoolQueue { Name = newBuild.AgentQueue }; if (taskState.AllowAddTrigger) { newDefinition.Triggers.Add( new ContinuousIntegrationTrigger { BatchChanges = true, BranchFilters = { branchState.BranchFilter }, MaxConcurrentBuildsPerBranch = 1, PathFilters = { "+/" + taskState.PathFilters } }); } var buildStep = new BuildDefinitionStep { AlwaysRun = true, ContinueOnError = true, DisplayName = taskState.DisplayName, Enabled = true, TaskDefinition = new TaskDefinitionReference { DefinitionType = "metaTask", Id = taskState.Id, VersionSpec = "1.*" }, TimeoutInMinutes = 0 }; buildStep.Inputs.AddRange(taskState.Inputs); newDefinition.Steps.Add(buildStep); newDefinition.Variables.AddRange( taskState.Variables.ToDictionary( pair => pair.Key, pair => new BuildDefinitionVariable { IsSecret = false, AllowOverride = true, Value = pair.Value }) ); newDefinition.Path = newBuild.Root + "\\" + newBuild.Name; newDefinition.DefinitionQuality = DefinitionQuality.Definition; newDefinition.JobTimeoutInMinutes = 60; //newDefinition.RetentionRules.Add( // new RetentionPolicy() // { // }); return(newDefinition); }
private static async Task AsyncMain() { // Create instance of VssConnection using AAD Credentials for AAD backed account var vssConnection = new VssConnection(new Uri("/"), new VssBasicCredential(string.Empty, "")); using (var projectClient = await vssConnection.GetClientAsync <ProjectHttpClient>()) using (var buildClient = vssConnection.GetClient <BuildHttpClient>()) { var myCustomBuildStep = await GetAddFeedStep(projectClient, buildClient); if (myCustomBuildStep == null) { return; } var projects = await projectClient.GetProjects(); foreach (var teamProjectReference in projects) { Console.WriteLine($"{teamProjectReference.Name}"); var definitionReferences = await buildClient.GetDefinitionsAsync(teamProjectReference.Id, type : DefinitionType.Build); foreach (var definitionReference in definitionReferences) { var definition = await buildClient.GetDefinitionAsync(definitionId : definitionReference.Id, project : teamProjectReference.Id) as BuildDefinition; if (definition == null) { continue; } Console.WriteLine( $"\t{definitionReference.Name} ({definitionReference.Id}) - {definition.Steps.Count} steps"); if (!definition.Variables.ContainsKey("MyGetUsername")) { definition.Variables.Add("MyGetUsername", new BuildDefinitionVariable() { Value = "" }); } if (!definition.Variables.ContainsKey("MyGetPassword")) { definition.Variables.Add("MyGetPassword", new BuildDefinitionVariable() { Value = "", IsSecret = true }); } var currentAddFeedStep = definition.Steps.FirstOrDefault( s => s.TaskDefinition.Id == myCustomBuildStep.TaskDefinition.Id); if (currentAddFeedStep == null) { currentAddFeedStep = new BuildDefinitionStep { TaskDefinition = myCustomBuildStep.TaskDefinition }; foreach (var stepInput in myCustomBuildStep.Inputs) { currentAddFeedStep.Inputs.Add(stepInput); } definition.Steps.Add(currentAddFeedStep); } currentAddFeedStep.Enabled = true; var orderedSteps = new List <BuildDefinitionStep>(definition.Steps.Count) { currentAddFeedStep }; orderedSteps.AddRange( definition.Steps.Where(s => s.TaskDefinition.Id != myCustomBuildStep.TaskDefinition.Id)); definition.Steps.Clear(); definition.Steps.AddRange(orderedSteps); await buildClient.UpdateDefinitionAsync(definition, definitionId : definitionReference.Id, project : teamProjectReference.Id); } } } }
List <Step> GenSteps(BuildDefinitionStep task) => GenSteps(task.TaskDefinition.Id, task.DisplayName, task.TaskDefinition.VersionSpec, task.Inputs, task.Environment, task.Condition, task.ContinueOnError, task.TimeoutInMinutes);