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