Пример #1
0
        public async Task <BuildDefinition> CreatePipeline(string name, string projectName, string repositoryName, string filename, string folderPath)
        {
            BuildDefinition definition = new BuildDefinition
            {
                Name        = name,
                Description = $"A pipeline for {name} based on {filename}"
            };

            BuildRepository repository = new BuildRepository
            {
                Name          = repositoryName,
                Type          = "tfsgit",
                DefaultBranch = "master"
            };

            definition.Repository = repository;
            definition.Path       = folderPath;

            var process = new YamlProcess
            {
                YamlFilename = filename
            };

            definition.Process = process;

            definition.Queue = new AgentPoolQueue
            {
                Id = await GetAgentQueueByHeuristic(projectName)
            };

            ContinuousIntegrationTrigger ciTrigger = new ContinuousIntegrationTrigger();

            ciTrigger.SettingsSourceType = 2;
            definition.Triggers.Add(ciTrigger);

            BuildDefinition pipeline = null;

            try
            {
                pipeline = await Build.CreateDefinitionAsync(definition, projectName);
            }
            catch (DefinitionExistsException)
            {
                pipeline = await GetPipeline(projectName, name);
            }

            return(pipeline);
        }
        public void  AddTriggers(
            BuildDefinition definition,
            CustomBuildDefinitionPayload payload)
        {
            if (payload.CITriggers != null)
            {
                foreach (var trg in payload.CITriggers)
                {
                    var trigger = new ContinuousIntegrationTrigger();
                    trigger.BranchFilters.AddRange(trg.BranchFilter);
                    trigger.PathFilters.AddRange(trg.PathFilter);
                    trigger.SettingsSourceType           = 1;
                    trigger.BatchChanges                 = false;
                    trigger.MaxConcurrentBuildsPerBranch = 1;
                    trigger.PollingInterval              = 0;

                    definition.Triggers.Add(trigger);
                }
            }


            if (payload.ScheduleTriggers != null)
            {
                var schTriggers = new ScheduleTrigger {
                    Schedules = new List <Schedule>()
                };

                foreach (var trg in payload.ScheduleTriggers)
                {
                    var sch = new Schedule();

                    sch.BranchFilters.AddRange(trg.BranchFilter);
                    sch.StartHours   = trg.Hours;
                    sch.StartMinutes = trg.Minutes;
                    sch.TimeZoneId   = trg.TimeZone;
                    sch.DaysToBuild  = GetScheduleDay(trg.DayOfTheWeek);
                    schTriggers.Schedules.Add(sch);
                }

                definition.Triggers.Add(schTriggers);
            }
        }
Пример #3
0
        public async Task <Model.BuildDefinition> Handle(
            CreateBuildDefinitionQuery message,
            CancellationToken cancellationToken)
        {
            var connection = _tfsProvider.GetConnection() as VssConnection;

            var git   = connection.GetClient <GitHttpClient>();
            var repos = git.GetRepositoriesAsync().Result;

            var theRepo             = repos.First(r => r.Name.ToLower() == message.BuildDefinition.RepoName);
            var sourceControlServer = connection.GetClient <TfvcHttpClient>();  // connect to the TFS source control subpart
            var buildServer         = connection.GetClient <BuildHttpClient>(); // connect to the build server subpart

            var buildDefinition = new BuildDefinition()
            {
                Name    = message.BuildDefinition.BuildDefinitionName,
                Project = new Microsoft.TeamFoundation.Core.WebApi.TeamProjectReference
                {
                    Id   = message.BuildDefinition.ProjectId,
                    Name = message.BuildDefinition.ProjectName
                },
                Repository = new BuildRepository
                {
                    Id            = theRepo.Id.ToString(),
                    Type          = "TfsGit",
                    DefaultBranch = "refs/heads/dev" //todo: change to /release
                },
                Queue = new AgentPoolQueue
                {
                    Id = 7 //todo
                }
            };
            //Continuous integration
            var continuousIntegrationTrigger = new ContinuousIntegrationTrigger()
            {
                BatchChanges = false
            };

            continuousIntegrationTrigger.BranchFilters.Add("+refs/heads/dev");
            continuousIntegrationTrigger.BranchFilters.Add("+refs/heads/release");

            if (!string.IsNullOrEmpty(message.BuildDefinition.RepoPath))
            {
                continuousIntegrationTrigger.PathFilters.Add($"-/");
                continuousIntegrationTrigger.PathFilters.Add($"+/{message.BuildDefinition.RepoPath}");
            }

            buildDefinition.Triggers.Add(continuousIntegrationTrigger);
            //end Continuous Integration

            var process = new DesignerProcess()
            {
            };
            var phase1 = new Phase()
            {
                Name = "Phase 1"
            };
            string repoPath = message.BuildDefinition.RepoPath;

            if (!string.IsNullOrEmpty(message.BuildDefinition.RepoPath))
            {
                repoPath += "/";
            }
            phase1.Steps.Add(BuildStepBuildApps(repoPath));
            phase1.Steps.Add(BuildStepTestApps(repoPath));
            phase1.Steps.Add(BuildStepPublishTestResults(repoPath));
            phase1.Steps.Add(BuildStepSetVars(repoPath));
            phase1.Steps.Add(BuildStepBuildServiceImage(repoPath));
            phase1.Steps.Add(BuildStepBuildOutput(repoPath, message.ServiceName));
            phase1.Steps.Add(BuildStepPushServiceImage(repoPath));
            phase1.Steps.Add(BuildStepPublishArtifact());

            process.Phases.Add(phase1);
            buildDefinition.Process = process;

            BuildDefinition buildDefinitionResult = null;

            try
            {
                buildDefinitionResult = buildServer.CreateDefinitionAsync(buildDefinition).Result;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return(null);
            }
            Console.WriteLine($"Created build definition {buildDefinition.Name} {buildDefinitionResult.Id}");

            return(buildDefinitionResult.ToModel());
        }