예제 #1
0
        private void MonitorBuilds(object state)
        {
            if (!_isBackgroundProcessRunning)
            {
                _isBackgroundProcessRunning = true;

                List <BuildDefinitionItem> crashedBuilds = new List <BuildDefinitionItem>();

                foreach (var buildItem in BuildList)
                {
                    BuildRunItem newLastRun = null;

                    // get last run for particular build
                    //var details = buildItem.TFSBuildDefInstance.QueryBuilds();

                    IBuildDetailSpec spec = BuildServer.CreateBuildDetailSpec("*");
                    spec.InformationTypes = null;                                       // for speed improvement
                    //spec.MinFinishTime = DateTime.Now.AddDays(-21); //to get only builds of last 3 weeks
                    spec.MaxBuildsPerDefinition = 1;                                    //get only one build per build definintion
                    spec.QueryOrder             = BuildQueryOrder.FinishTimeDescending; //get the latest build only
                    spec.QueryOptions           = QueryOptions.All;
                    spec.DefinitionSpec.Name    = buildItem.Name;

                    var details = BuildServer.QueryBuilds(spec).Builds;

                    if (details != null)
                    {
                        newLastRun = GetBuildRunInfo(details);

                        //check that status changed
                        if (newLastRun != null && buildItem.LastRun != null &&
                            (
                                newLastRun.BuildNumber != buildItem.LastRun.BuildNumber
                                ||
                                newLastRun.BuildStatus != buildItem.LastRun.BuildStatus
                            )
                            )
                        {
                            buildItem.LastRun = newLastRun;

                            crashedBuilds.Add(buildItem);
                        }
                    }
                }

                if (BuildStatusChanged != null)
                {
                    BuildStatusChanged(this, new BuildStatusChangedEventArgs()
                    {
                        BuildDefinitions = crashedBuilds.ToArray()
                    });
                }

                _isBackgroundProcessRunning = false;
            }
        }
예제 #2
0
        private static BuildRunItem GetBuildRunInfo(IBuildDetail[] details)
        {
            BuildRunItem newLastRun = null;
            var          lastRunTFS = details.FirstOrDefault();

            if (lastRunTFS != null)
            {
                newLastRun = new TFSBuildRunItem()
                {
                    BuildNumber       = lastRunTFS.BuildNumber,
                    StartTime         = lastRunTFS.StartTime,
                    FinishTime        = lastRunTFS.FinishTime,
                    BuildStatus       = (BuildStatusType)((int)lastRunTFS.Status),                              //TODO: implement proper conversion
                    CompilationStatus = (BuildCompilationStatusType)((int)lastRunTFS.CompilationStatus),        //TODO: implement proper conversion
                    TriggeredBy       = new RepositoryUser()
                    {
                        Name = lastRunTFS.RequestedBy
                    },
                    LastChangedBy = new RepositoryUser()
                    {
                        Name = lastRunTFS.LastChangedBy
                    },
                    CommittedBy = new RepositoryUser()
                    {
                        Name = lastRunTFS.RequestedFor
                    },
                    Revision            = lastRunTFS.SourceGetVersion,
                    TFSBuildLastDetails = lastRunTFS
                };

                //int changeId = InformationNodeConverters.GetChangesetId(lastRunTFS.Information);
                //if (changeId > 0)
                //{
                //    //check who last changed build
                //    Changeset verItem = TeamVersionControl.GetChangeset(changeId);
                //    newLastRun.CommittedBy = new RepositoryUser() { Name = verItem.Committer };
                //}
            }
            return(newLastRun);
        }