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