示例#1
0
        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;
                }

            }
        }
示例#2
0
        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);
        }
示例#3
0
        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;
            }
        }
示例#4
0
        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;
            }
        }