簡體   English   中英

TFS 2015 Update 3中的C#/ VBS自動化團隊項目創建

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

我正在尋找一種在TFS 2015 Update 3中自動化團隊項目創建的方法。

我在網上進行了快速爬網,發現了有關如何執行此操作的各種帖子,但沒有涉及2015年版本更新3的內容。

我發現了一些鏈接:
#1
#2

我想做到的盡可能簡單和輕便。

一個大概的想法是填寫所需的所有細節,例如:
在excel上登錄詳細信息,服務器,集合,項目名稱等,將信息保存在某處(例如link#2上顯示的xml)並觸發批處理文件以通過vbs宏執行必要的操作。

老實說,我不知道從哪里開始,比如如何使項目創建部分自動化。

如果您能指出我正確的道路,請開始欣賞。 也歡迎想法:)。 提前致謝!

您可以使用此REST API創建團隊項目。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM