Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
                        }
                    }
                }
        }
Beispiel #4
0
 List <Step> GenSteps(BuildDefinitionStep task)
 => GenSteps(task.TaskDefinition.Id, task.DisplayName, task.TaskDefinition.VersionSpec, task.Inputs, task.Environment, task.Condition, task.ContinueOnError, task.TimeoutInMinutes);