简体   繁体   English

TFS 2015 Update 3中的C#/ VBS自动化团队项目创建

[英]C# / VBS Automate Team Project Creation in TFS 2015 Update 3

I'm looking for a way to automate team project creation in TFS 2015 Update 3. 我正在寻找一种在TFS 2015 Update 3中自动化团队项目创建的方法。

I did a quick crawl over the web and found various posts on how to do it but nothing specific to 2015 version update 3. 我在网上进行了快速爬网,发现了有关如何执行此操作的各种帖子,但没有涉及2015年版本更新3的内容。

Some links I found: 我发现了一些链接:
#1 #1
#2 #2

I'd like to do it as simple and lightweight as possible. 我想做到的尽可能简单和轻便。

A rough idea would be to fill up all the details needed eg: 一个大概的想法是填写所需的所有细节,例如:
Sign in details, server, collection, project name, etc... on an excel, save the information somewhere (like an xml for presented on link#2) and trigger a batch file to do the necessary stuff via vbs macro. 在excel上登录详细信息,服务器,集合,项目名称等,将信息保存在某处(例如link#2上显示的xml)并触发批处理文件以通过vbs宏执行必要的操作。

To be honest I do not know where to start yet, like how to even automate the project creation part. 老实说,我不知道从哪里开始,比如如何使项目创建部分自动化。

Appreciate if you can point me in the right path to start this out. 如果您能指出我正确的道路,请开始欣赏。 Ideas are also welcome :). 也欢迎想法:)。 Thanks in advance! 提前致谢!

You could use this REST API to create a team project. 您可以使用此REST API创建团队项目。 TFS also provide to using C# code to create a team project: TFS还提供使用C#代码创建团队项目的方法:

    public static TeamProject CreateProject()
    {

        string projectName = "Sample project";
        string projectDescription = "Short description for my new project";
        string processName = "Agile";

        VssCredentials c = new VssCredentials(new Microsoft.VisualStudio.Services.Common.WindowsCredential(new NetworkCredential("username", "password", "domain")));
        VssConnection connection = new VssConnection(new Uri("http://v-tinmo-12r2:8080/tfs/MyCollection"),c);


        // Setup version control properties
        Dictionary<string, string> versionControlProperties = new Dictionary<string, string>();
        versionControlProperties[TeamProjectCapabilitiesConstants.VersionControlCapabilityAttributeName] =
            SourceControlTypes.Git.ToString();

        // Setup process properties    
        ProcessHttpClient processClient = connection.GetClient<ProcessHttpClient>();
        Guid processId = processClient.GetProcessesAsync().Result.Find(process => { return process.Name.Equals(processName, StringComparison.InvariantCultureIgnoreCase); }).Id;
        Dictionary<string, string> processProperaties = new Dictionary<string, string>();
        processProperaties[TeamProjectCapabilitiesConstants.ProcessTemplateCapabilityTemplateTypeIdAttributeName] =
            processId.ToString();

        // Construct capabilities dictionary
        Dictionary<string, Dictionary<string, string>> capabilities = new Dictionary<string, Dictionary<string, string>>();
        capabilities[TeamProjectCapabilitiesConstants.VersionControlCapabilityName] =
            versionControlProperties;
        capabilities[TeamProjectCapabilitiesConstants.ProcessTemplateCapabilityName] =
            processProperaties;

        //Construct object containing properties needed for creating the project
       TeamProject projectCreateParameters = new TeamProject()
        {
            Name = projectName,
            Description = projectDescription,
            Capabilities = capabilities
        };

        // Get a client
        ProjectHttpClient projectClient = connection.GetClient<ProjectHttpClient>();
        TeamProject project = null;
        try
        {
            Console.WriteLine("Queuing project creation...");

            // Queue the project creation operation 
            // This returns an operation object that can be used to check the status of the creation
            OperationReference operation = projectClient.QueueCreateProject(projectCreateParameters).Result;

            // Check the operation status every 5 seconds (for up to 30 seconds)
            Operation completedOperation = WaitForLongRunningOperation(connection, operation.Id, 5, 30).Result;

            // Check if the operation succeeded (the project was created) or failed
            if (completedOperation.Status == OperationStatus.Succeeded)
            {
                // Get the full details about the newly created project
                project = projectClient.GetProject(
                    projectCreateParameters.Name,
                    includeCapabilities: true,
                    includeHistory: true).Result;

                Console.WriteLine();
                Console.WriteLine("Project created (ID: {0})", project.Id);

            }
            else
            {
                Console.WriteLine("Project creation operation failed: " + completedOperation.ResultMessage);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception during create project: ", ex.Message);
        }

        return project;
    }



    private static async Task<Operation> WaitForLongRunningOperation(VssConnection connection, Guid operationId, int interavalInSec = 5, int maxTimeInSeconds = 60, CancellationToken cancellationToken = default(CancellationToken))
    {
        OperationsHttpClient operationsClient = connection.GetClient<OperationsHttpClient>();
        DateTime expiration = DateTime.Now.AddSeconds(maxTimeInSeconds);
        int checkCount = 0;

        while (true)
        {
            Console.WriteLine(" Checking status ({0})... ", (checkCount++));

            Operation operation = await operationsClient.GetOperation(operationId, cancellationToken);

            if (!operation.Completed)
            {
                Console.WriteLine("   Pausing {0} seconds", interavalInSec);

                await Task.Delay(interavalInSec * 1000);

                if (DateTime.Now > expiration)
                {
                    throw new Exception(String.Format("Operation did not complete in {0} seconds.", maxTimeInSeconds));
                }
            }
            else
            {
                return operation;
            }
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在内部TFS 2015 Update3中使用C#中的REST API获取团队项目的列表 - Get a list of team projects using REST api in C# for on premise TFS 2015 Update3 从C#.Net App使用TFS SDK创建团队项目 - Create a Team Project with TFS SDK from C# .Net App 使用C#从团队项目中获取用户列表并在TFS 2012中 - getting user list from the team project your in at TFS 2012 using C# 链接到TFS-Git的Visual Studio 2013中的C#DLL项目的团队资源管理器中未出现构建节点 - Build Node doesn't appear in Team Explorer for a C# DLL project in Visual Studio 2013 linked to TFS-Git 使用C#连接到Visual Studio 2015中的Team Foundation Server? - Connecting to a Team Foundation Server in Visual Studio 2015 with C#? 通过TFS API REST或TFS SERVER API C#在TFS 2017中添加团队管理员 - Add team's administrator in TFS 2017 by TFS API REST or TFS SERVER API C# 使用C#编辑TFS团队构建定义 - Edit TFS team build definition using C# TF30177:团队项目创建失败(TFS 2012和Sql server 2012) - TF30177:Team Project Creation Failed(TFS 2012 and Sql server 2012) TFS(AzureDevOps)2015 C#获取在构建中使用的变量 - TFS (AzureDevOps) 2015 C# Get Variables used in Build 在TFS 2015中引用共享项目 - Reference to shared project in TFS 2015
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM