Пример #1
0
        /// <summary>
        /// Queries TFS for a list of build definitions
        /// </summary>
        /// <param name="projectName">If set, only builddefs for this project are queried</param>
        /// <param name="buildName"></param>
        /// <returns></returns>
        public static IEnumerable<IBuildDefinitionQueryResult> QueryBuildDefinitions(ICommonStructureService css, IBuildServer bs, string projectName = "", string buildName = "")
        {
            var specs = new List<IBuildDefinitionSpec>();

            if (String.IsNullOrWhiteSpace(projectName))
            {
                // Get a query spec for each team project
                if (String.IsNullOrWhiteSpace(buildName))
                    specs.AddRange(css.ListProjects().Select(pi => bs.CreateBuildDefinitionSpec(pi.Name)));
                else
                    specs.AddRange(css.ListProjects().Select(pi => bs.CreateBuildDefinitionSpec(pi.Name, buildName)));
            }
            else
            {
                // Get a query spec just for this team project
                if (String.IsNullOrWhiteSpace(buildName))
                    specs.Add(bs.CreateBuildDefinitionSpec(projectName));
                else
                    specs.Add(bs.CreateBuildDefinitionSpec(projectName, buildName));
            }

            // Query the definitions
            var results = bs.QueryBuildDefinitions(specs.ToArray());
            return results;
        }
Пример #2
0
        static void QueryBuildDefinitions(IBuildServer buildServer)
        {
            Console.WriteLine();
            Console.WriteLine("QueryBuildDefinitions:");

            IBuildDefinition[] buildDefinitions = buildServer.QueryBuildDefinitions("Contoso");
            foreach (var buildDefinition in buildDefinitions)
            {
                Console.WriteLine("\t{0}", buildDefinition.Name);
            }
        }
Пример #3
0
        static void BulkUpdateController(IBuildServer buildServer)
        {
            IBuildDefinition[] buildDefinitions = buildServer.QueryBuildDefinitions("Contoso");

            IBuildController defaultBuildController = buildServer.QueryBuildServiceHosts("*")
                .Where(bsh => bsh.Controller != null).Select(bsh => bsh.Controller).First();

            foreach (IBuildDefinition buildDefinition in buildDefinitions)
            {
                buildDefinition.BuildController = defaultBuildController;
                buildDefinition.Save();
            }
        }
Пример #4
0
        public void ConnectToTfsServer(string hostname, string teamCollection, string projectName, string buildDefinitionName = null)
        {
            _hostname = hostname;

            _isWebServer = _hostname.Contains("://");
            try
            {
                string url;
                if (_isWebServer)
                {
                    _hostname = _hostname.TrimEnd('\\', '/');
                    url = _hostname + "/" + teamCollection;
                    _urlPrefix = hostname + "/" + teamCollection + "/" + projectName + "/_build#buildUri=";
                }
                else
                {
                    url = "http://" + _hostname + ":8080/tfs/" + teamCollection;
                    _urlPrefix = "http://" + hostname + ":8080/tfs/Build/Build.aspx?artifactMoniker=";
                }

                _tfsCollection = new TfsTeamProjectCollection(new Uri(url), new TfsClientCredentials());

                _buildServer = _tfsCollection.GetService<IBuildServer>();

                var buildDefs = _buildServer.QueryBuildDefinitions(projectName);

                if (buildDefs.Length != 0)
                {
                    _buildDefinition = string.IsNullOrWhiteSpace(buildDefinitionName)
                        ? buildDefs[0]
                        : buildDefs.FirstOrDefault(b => string.Compare(b.Name, buildDefinitionName, StringComparison.InvariantCultureIgnoreCase) == 0);
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }
        }
Пример #5
0
        public void ConnectToTfsServer(string hostname, string teamCollection, string projectName, Regex buildDefinitionNameFilter = null)
        {
            _hostname = hostname;

            _isWebServer = _hostname.Contains("://");
            try
            {
                string url;
                if (_isWebServer)
                {
                    _hostname  = _hostname.TrimEnd('\\', '/');
                    url        = _hostname + "/" + teamCollection;
                    _urlPrefix = hostname + "/" + teamCollection + "/" + projectName + "/_build#buildUri=";
                }
                else
                {
                    url        = "http://" + _hostname + ":8080/tfs/" + teamCollection;
                    _urlPrefix = "http://" + hostname + ":8080/tfs/Build/Build.aspx?artifactMoniker=";
                }

                _tfsCollection = new TfsTeamProjectCollection(new Uri(url), new TfsClientCredentials());

                _buildServer = _tfsCollection.GetService <IBuildServer>();

                var buildDefs = _buildServer.QueryBuildDefinitions(projectName);

                if (buildDefs.Length != 0)
                {
                    _buildDefinitions = string.IsNullOrWhiteSpace(buildDefinitionNameFilter.ToString())
                        ? buildDefs
                        : (buildDefs.Where(b => buildDefinitionNameFilter.IsMatch(b.Name))).Cast <IBuildDefinition>().ToArray();
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }
        }
Пример #6
0
        public void ConnectToTfsServer(string hostname, string teamCollection, string projectName, Regex buildDefinitionNameFilter = null)
        {
            _hostname = hostname;

            _isWebServer = _hostname.Contains("://");
            try
            {
                string url;
                if (_isWebServer)
                {
                    _hostname = _hostname.TrimEnd('\\', '/');
                    url = _hostname + "/" + teamCollection;
                    _urlPrefix = hostname + "/" + teamCollection + "/" + projectName + "/_build#buildUri=";
                }
                else
                {
                    url = "http://" + _hostname + ":8080/tfs/" + teamCollection;
                    _urlPrefix = "http://" + hostname + ":8080/tfs/Build/Build.aspx?artifactMoniker=";
                }

                _tfsCollection = new TfsTeamProjectCollection(new Uri(url), new TfsClientCredentials());

                _buildServer = _tfsCollection.GetService<IBuildServer>();

                var buildDefs = _buildServer.QueryBuildDefinitions(projectName);

                if (buildDefs.Length != 0)
                {
                    _buildDefinitions = string.IsNullOrWhiteSpace(buildDefinitionNameFilter.ToString())
                        ? buildDefs
                        : (buildDefs.Where(b => buildDefinitionNameFilter.IsMatch(b.Name))).Cast<IBuildDefinition>().ToArray();
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }
        }
Пример #7
0
        public void BuildCopy()
        {
            if (string.IsNullOrEmpty(_configuration.Source) ||
                string.IsNullOrEmpty(_configuration.ProjectSource) ||
                string.IsNullOrEmpty(_configuration.Destination) ||
                string.IsNullOrEmpty(_configuration.ProjectDestination))
            {
                WriteHelp();
                return;
            }

            IBuildServer buildServerSource      = GetTfsBuildServer(_configuration.Source);
            IBuildServer buildServerDestination = GetTfsBuildServer(_configuration.Destination);

            IBuildDefinition[] sourceBuildDefinitions = buildServerSource.QueryBuildDefinitions(_configuration.ProjectSource);

            foreach (var sourceBuildDef in sourceBuildDefinitions)
            {
                IBuildDefinition targetBuildDef = buildServerDestination.CreateBuildDefinition(_configuration.ProjectDestination);
                Copy(sourceBuildDef, targetBuildDef);
                targetBuildDef.Save();
            }
        }
Пример #8
0
        internal static void Add_BuildDefinitions(XlHlp.XlLocation insertAt,
                                                  Options_AZDO_TFS options,
                                                  IBuildServer buildServer,
                                                  TeamProject teamProject)
        {
            Int64 startTicks = Log.APPLICATION("Enter", Common.LOG_CATEGORY);

            try
            {
                var buildDefinitions = buildServer.QueryBuildDefinitions(teamProject.Name);

                foreach (IBuildDefinition buildDef in buildDefinitions)
                {
                    insertAt.ClearOffsets();

                    XlHlp.AddOffsetContentToCell(insertAt.AddOffsetColumn(), string.Format("{0}", teamProject.Name));
                    XlHlp.AddOffsetContentToCell(insertAt.AddOffsetColumn(), string.Format("{0}", buildDef.Name));
                    XlHlp.AddOffsetContentToCell(insertAt.AddOffsetColumn(), string.Format("{0}", buildDef.Description));
                    XlHlp.AddOffsetContentToCell(insertAt.AddOffsetColumn(), string.Format("{0}", buildDef.QueueStatus));

                    insertAt.IncrementRows();
                }
            }
            catch (Exception ex)
            {
                insertAt.ClearOffsets();

                XlHlp.AddOffsetContentToCell(insertAt.AddOffsetColumn(), string.Format("{0}", teamProject.Name));
                XlHlp.AddOffsetContentToCell(insertAt.AddOffsetColumn(), string.Format("{0}", "<N/A>"));
                XlHlp.AddOffsetContentToCell(insertAt.AddOffsetColumn(), string.Format("{0}", "<N/A>"));
                XlHlp.AddOffsetContentToCell(insertAt.AddOffsetColumn(), string.Format("{0}", "<N/A>"));

                insertAt.IncrementRows();
            }

            Log.APPLICATION("Exit", Common.LOG_CATEGORY, startTicks);
        }
Пример #9
0
        public static IList <BuildProcessTemplateInfo> GetBuildProcessTemplates(ApplicationTask task, IBuildServer buildServer, IEnumerable <string> teamProjectNames)
        {
            var processTemplates = new List <BuildProcessTemplateInfo>();
            var step             = 0;

            foreach (var teamProjectName in teamProjectNames)
            {
                task.SetProgress(step++, string.Format(CultureInfo.CurrentCulture, "Processing Team Project \"{0}\"", teamProjectName));
                try
                {
                    var teamProjectBuildDefinitions = buildServer.QueryBuildDefinitions(teamProjectName, QueryOptions.Process);

                    foreach (var processTemplate in buildServer.QueryProcessTemplates(teamProjectName))
                    {
                        var processTemplateBuildDefinitions = new List <IBuildDefinition>();
                        foreach (var teamProjectBuildDefinition in teamProjectBuildDefinitions)
                        {
                            if (teamProjectBuildDefinition.Process != null && BuildProcessTemplateInfo.AreEquivalent(teamProjectBuildDefinition.Process, processTemplate))
                            {
                                processTemplateBuildDefinitions.Add(teamProjectBuildDefinition);
                            }
                        }
                        processTemplates.Add(new BuildProcessTemplateInfo(processTemplate, processTemplateBuildDefinitions));
                    }
                }
                catch (Exception exc)
                {
                    task.SetWarning(string.Format(CultureInfo.CurrentCulture, "An error occurred while processing Team Project \"{0}\"", teamProjectName), exc);
                }
                if (task.IsCanceled)
                {
                    task.Status = "Canceled";
                    break;
                }
            }
            return(processTemplates);
        }
Пример #10
0
        private static int ExportBuilds(IBuildServer buildServer)
        {
            IBuildDefinition[] defs = buildServer.QueryBuildDefinitions(TeamProject);

            if (!Directory.Exists(ExportPath))
            {
                Console.WriteLine("ExportPath not found, creating: {0}", ExportPath);
                Directory.CreateDirectory(ExportPath);
            }

            Console.WriteLine("Exporting {0} definitions to: {1}", defs.Length, ExportPath);
            Console.WriteLine(string.Empty);

            foreach (var b in defs)
            {
                Console.WriteLine(b.Name);
                BuildManagerViewModel.ExportDefinition(new BuildDefinitionViewModel(b), ExportPath);
            }

            Console.WriteLine(string.Empty);
            Console.WriteLine("{0} definitions exported to: {1}", defs.Length, ExportPath);

            return(0);
        }
Пример #11
0
        public void ConnectToTfsServer(string hostname, string teamCollection, string projectName, string buildDefinitionName = null)
        {
            _hostname = hostname;

            _isWebServer = _hostname.Contains("://");
            try
            {
                string url;
                if (_isWebServer)
                {
                    _hostname = _hostname.TrimEnd('\\', '/');
                    url = _hostname + "/" + teamCollection;
                    _urlPrefix = hostname + "/" + teamCollection + "/" + projectName + "/_build#buildUri=";
                }
                else
                {
                    url = "http://" + _hostname + ":8080/tfs/" + teamCollection;
                    _urlPrefix = "http://" + hostname + ":8080/tfs/Build/Build.aspx?artifactMoniker=";
                }

                // Get a connection to the desired Team Foundation Server
                _tfServer = TeamFoundationServerFactory.GetServer(url, new UICredentialsProvider());

                // Get a reference to a build service
                _buildServer = _tfServer.GetService<IBuildServer>();

                // Retrieve a list of build definitions
                var buildDefs = _buildServer.QueryBuildDefinitions(projectName);

                if (buildDefs.Length != 0)
                {
                    if (string.IsNullOrWhiteSpace(buildDefinitionName))
                        _buildDefinition = buildDefs[0];
                    else
                    {
                        foreach (var buildDefinition in buildDefs)
                        {
                            if (string.Compare(buildDefinition.Name, buildDefinitionName, true) == 0)
                            {
                                _buildDefinition = buildDefinition;
                                return;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }
        }
Пример #12
0
        private static int ExportBuilds(IBuildServer buildServer)
        {
            IBuildDefinition[] defs = buildServer.QueryBuildDefinitions(TeamProject);

            if (!Directory.Exists(ExportPath))
            {
                Console.WriteLine("ExportPath not found, creating: {0}", ExportPath);
                Directory.CreateDirectory(ExportPath);
            }

            Console.WriteLine("Exporting {0} definitions to: {1}", defs.Length, ExportPath);
            Console.WriteLine(string.Empty);

            foreach (var b in defs)
            {
                Console.WriteLine(b.Name);
                BuildManagerViewModel.ExportDefinition(new BuildDefinitionViewModel(b), ExportPath);
            }

            Console.WriteLine(string.Empty);
            Console.WriteLine("{0} definitions exported to: {1}", defs.Length, ExportPath);

            return 0;
        }
Пример #13
0
        public IEnumerable <string> GetBuildDefinitions(string projectName)
        {
            var buildDefinitions = buildServer.QueryBuildDefinitions(projectName);

            return(buildDefinitions.Select(b => b.Name).ToList());
        }
Пример #14
0
        static void QueueAllBuildDefinitions(IBuildServer buildServer)
        {
            foreach (IBuildDefinition buildDefinition in buildServer.QueryBuildDefinitions("Contoso"))
            {
                IBuildRequest request;
                request = buildDefinition.CreateBuildRequest();

                buildServer.QueueBuild(request);
            }
        }
 // Grab all build definitions
 private IBuildDefinition[] GetAllBuildDefinitionsFromTheTeamProject()
 {
     _bs = _tfs.GetService <IBuildServer>();
     return(_bs.QueryBuildDefinitions(_selectedTeamProject));
 }
Пример #16
0
        private void InitBuild()
        {
            buildServer = tfsCollection.GetService<IBuildServer>();
            var allBuilds = buildServer.QueryBuildDefinitions("*");

            MessageBox.Show(this, string.Join("\n", allBuilds.Select(b => b.TeamProject + "\\" + b.Name).OrderBy(e => e)));
        }
Пример #17
0
        public static void RegisterBuildProcessTemplate(ApplicationTask task, IBuildServer buildServer, IEnumerable <string> teamProjectNames, string templateServerPath, ProcessTemplateType templateType, bool registerIfTemplateDoesNotExist, bool unregisterAllOtherTemplates, bool unregisterAllOtherTemplatesIncludesUpgradeTemplate, bool simulate)
        {
            var step = 0;

            foreach (var teamProjectName in teamProjectNames)
            {
                try
                {
                    task.SetProgress(step++, string.Format(CultureInfo.CurrentCulture, "Processing Team Project \"{0}\"", teamProjectName));

                    var allTemplates      = buildServer.QueryProcessTemplates(teamProjectName);
                    var matchingTemplates = allTemplates.Where(t => t.ServerPath.Equals(templateServerPath, StringComparison.OrdinalIgnoreCase)).ToList();

                    if (unregisterAllOtherTemplates)
                    {
                        var templatesToUnregister = allTemplates.Except(matchingTemplates);
                        if (!unregisterAllOtherTemplatesIncludesUpgradeTemplate)
                        {
                            templatesToUnregister = templatesToUnregister.Where(t => t.TemplateType != ProcessTemplateType.Upgrade);
                        }
                        foreach (var templateToUnregister in templatesToUnregister)
                        {
                            task.Status = string.Format(CultureInfo.CurrentCulture, "Unregistering existing build process template \"{0}\"", templateToUnregister.ServerPath);
                            var buildDefinitions = buildServer.QueryBuildDefinitions(teamProjectName, QueryOptions.Process);
                            foreach (var buildDefinition in buildDefinitions)
                            {
                                if (buildDefinition.Process != null && BuildProcessTemplateInfo.AreEquivalent(buildDefinition.Process, templateToUnregister))
                                {
                                    task.SetWarning(string.Format(CultureInfo.CurrentCulture, "WARNING - The build \"{0}\" uses the build process template \"{1}\" that is being unregistered", buildDefinition.Name, templateToUnregister.ServerPath));
                                }
                            }
                            if (!simulate)
                            {
                                templateToUnregister.Delete();
                            }
                        }
                    }
                    if (!(unregisterAllOtherTemplates && unregisterAllOtherTemplatesIncludesUpgradeTemplate))
                    {
                        if (templateType == ProcessTemplateType.Default || templateType == ProcessTemplateType.Upgrade)
                        {
                            // There can be only one upgrade or default template for a team project.
                            // Make sure there isn't already a template with that type.
                            foreach (var template in allTemplates.Except(matchingTemplates).Where(t => t.TemplateType == templateType))
                            {
                                task.Status = string.Format(CultureInfo.CurrentCulture, "Changing type of existing build process template \"{0}\" from \"{1}\" to \"{2}\"", template.ServerPath, template.TemplateType.ToString(), ProcessTemplateType.Custom.ToString());
                                if (!simulate)
                                {
                                    template.TemplateType = ProcessTemplateType.Custom;
                                    template.Save();
                                }
                            }
                        }
                    }

                    if (registerIfTemplateDoesNotExist && !matchingTemplates.Any())
                    {
                        task.Status = string.Format(CultureInfo.CurrentCulture, "Registering new build process template \"{0}\" as type \"{1}\"", templateServerPath, templateType.ToString());
                        if (!simulate)
                        {
                            var template = buildServer.CreateProcessTemplate(teamProjectName, templateServerPath);
                            template.TemplateType = templateType;
                            template.Save();
                        }
                    }
                    else
                    {
                        foreach (var template in matchingTemplates.Where(t => t.TemplateType != templateType))
                        {
                            task.Status = string.Format(CultureInfo.CurrentCulture, "Changing type of existing build process template \"{0}\" from \"{1}\" to \"{2}\"", template.ServerPath, template.TemplateType.ToString(), templateType.ToString());
                            if (!simulate)
                            {
                                template.TemplateType = templateType;
                                template.Save();
                            }
                        }
                    }
                }
                catch (Exception exc)
                {
                    task.SetError(string.Format(CultureInfo.CurrentCulture, "An error occurred while registering the build process template \"{0}\" for Team Project \"{1}\"", templateServerPath, teamProjectName), exc);
                }
                if (task.IsCanceled)
                {
                    task.Status = "Canceled";
                    break;
                }
            }
        }