private BuildQueryEventArgs QueryBuilds(IEnumerable<BuildDefinition> buildDefinitions) { using (BuildServiceSoapClient soapClient = new BuildServiceSoapClient(GetBinding(Protocol, "BuildServiceSoap"), GetBuildEndpointAddress())) { List<BuildDetailSpec> buildDetailSpecs = new List<BuildDetailSpec>(); List<BuildQueueSpec> buildQueueSpecs = new List<BuildQueueSpec>(); //Do queries foreach (BuildDefinition definition in buildDefinitions) { BuildDetailSpec buildDetailSpec = new BuildDetailSpec { BuildNumber = "*", DefinitionPath = definition.FullPath, DefinitionSpec = new BuildDefinitionSpec { FullPath = definition.FullPath }, MaxBuildsPerDefinition = 1, MinChangedTime = DateTime.MinValue, MinFinishTime = DateTime.MinValue, QueryOrder = BuildQueryOrder.FinishTimeDescending }; buildDetailSpecs.Add(buildDetailSpec); } //Generate agent specs foreach (TeamProject project in Projects) { foreach (BuildAgent agent in project.BuildAgents) { buildQueueSpecs.Add(new BuildQueueSpec { AgentSpec = new BuildAgentSpec { FullPath = agent.FullPath, MachineName = agent.MachineName, Port = agent.Port }, CompletedAge = 300, DefinitionSpec = new BuildDefinitionSpec { FullPath = "\\" + project.ProjectName + "\\*" }, Options = QueryOptions.All, StatusFlags = QueueStatus.Completed | QueueStatus.InProgress | QueueStatus.Queued }); } } try { ReadOnlyCollection<BuildQueueQueryResult> queueResults = new List<BuildQueueQueryResult>(soapClient.QueryBuildQueue(buildQueueSpecs.ToArray())). AsReadOnly(); ReadOnlyCollection<BuildQueryResult> buildResults = new List<BuildQueryResult>(soapClient.QueryBuilds(buildDetailSpecs.ToArray())).AsReadOnly(); try { soapClient.Close(); } catch (Exception) { soapClient.Abort(); } return new BuildQueryEventArgs { BuildQueryResults = buildResults, BuildQueueQueryResults = queueResults }; } catch { return null; } } }
public void QueueBuild(string agentUri, string buildUri) { BuildServiceSoapClient soapClient = new BuildServiceSoapClient(GetBinding(Protocol, "BuildServiceSoap"), GetBuildEndpointAddress()); BuildRequest request = new BuildRequest { BuildAgentUri = agentUri, BuildDefinitionUri = buildUri }; soapClient.QueueBuild(request, QueueOptions.None); }
private IconColour GetBuildList() { var soapClient = new BuildServiceSoapClient(GetBinding(Protocol, "BuildServiceSoap"), GetBuildEndpointAddress()); bool projectsFound = false; try { foreach (TeamProject project in Projects) { BuildGroupItemSpec spec = new BuildDefinitionSpec { FullPath = String.Format(CultureInfo.InvariantCulture, "\\{0}\\*", project.ProjectName) }; BuildGroupQueryResult[] buildGroupQueryResults = soapClient.QueryBuildGroups(new[] { spec }); foreach (BuildGroupQueryResult result in buildGroupQueryResults) { //Add the build agents project.BuildAgents.Clear(); foreach (BuildAgent agent in result.Agents) { project.BuildAgents.Add(agent); } //Add the build definitions project.BuildDefinitions.Clear(); foreach (BuildDefinition definition in result.Definitions) { project.BuildDefinitions.Add(definition.Uri, definition); } //Fire update event if (OnProjectsUpdated != null) { OnProjectsUpdated(project, QueryBuilds(project.BuildDefinitions.Values)); } if (project.BuildDefinitions.Count > 0) { projectsFound = true; } } } if (projectsFound) { return IconColour.Green; } return IconColour.Grey; } catch { return IconColour.Red; } }
public QueuedBuild GetBuildStatus(int id) { using (BuildServiceSoapClient soapClient = new BuildServiceSoapClient(GetBinding(Protocol, "BuildServiceSoap"), GetBuildEndpointAddress())) { var buildResut = soapClient.QueryBuildQueueById(new[] {id}, QueryOptions.All).Builds[0]; try { soapClient.Close(); } catch (Exception) { soapClient.Abort(); } return buildResut; } }