|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
//using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Build.Client;
namespace Suresh.TeamFoundation.Addins
{
public partial class ConfigureBuildAgentsForm : Form
{
private string TeamFoundationServerName = string.Empty;
private string TeamProjectName = string.Empty;
private TeamFoundationServer tfsServer;
private IBuildServer buildServer;
public ConfigureBuildAgentsForm(string tfsServerName, string teamProjectName)
{
this.TeamFoundationServerName = tfsServerName;
this.TeamProjectName = teamProjectName;
InitializeComponent();
}
private void ConfigureBuildAgentsForm_Load(object sender, EventArgs e)
{
LoadConfigureBuildAgentsForm();
}
private void LoadConfigureBuildAgentsForm()
{
tfsServer = TeamFoundationServerFactory.GetServer(this.TeamFoundationServerName);
buildServer = tfsServer.GetService(typeof(IBuildServer)) as IBuildServer;
IBuildAgent[] buildAgentsAll = buildServer.QueryBuildAgents(this.TeamProjectName);
lstBoxAgentstoConfigure.DataSource = buildAgentsAll;
lstBoxAgentstoConfigure.DisplayMember = "Name";
}
private bool NoBuildAgentsSelected()
{
return lstBoxAgentstoConfigure.SelectedItems.Count <= 0;
}
private void btnConfigure_Click(object sender, EventArgs e)
{
try
{
ConfigureBuildAgents();
}
catch (Exception ex)
{
MessageBox.Show("Exception occurred while performing operation - " + ex.Message);
}
finally
{
this.Close();
}
}
private void ConfigureBuildAgents()
{
if (NoBuildAgentsSelected())
return;
IBuildAgent[] selectedBuildAgents = new IBuildAgent[lstBoxAgentstoConfigure.SelectedItems.Count];
for (int iCount = 0; iCount < selectedBuildAgents.Length; iCount++)
{
selectedBuildAgents[iCount] = lstBoxAgentstoConfigure.SelectedItems[iCount] as IBuildAgent;
}
List<IBuildDefinition> buildDefinitionsToQueue = new List<IBuildDefinition>();
IdentifyBuildDefinitionToQueue(buildDefinitionsToQueue);
QueueSelectedBuildDefnsOnSelectedBuildAgents(buildDefinitionsToQueue, selectedBuildAgents);
}
private void IdentifyBuildDefinitionToQueue(List<IBuildDefinition> buildDefinitionsToQueue)
{
IBuildDefinition[] allBuildDefinitions = buildServer.QueryBuildDefinitions(this.TeamProjectName);
foreach (IBuildDefinition buildDefinition in allBuildDefinitions)
{
if (IsBuildTasksDefinition(buildDefinition))
{
buildDefinitionsToQueue.Add(buildDefinition);
}
}
foreach (IBuildDefinition buildDefinition in allBuildDefinitions)
{
if (IsBuildTargetsDefinition(buildDefinition))
{
buildDefinitionsToQueue.Add(buildDefinition);
}
}
}
private void QueueSelectedBuildDefnsOnSelectedBuildAgents(List<IBuildDefinition> BuildDefinitionsToQueue, IBuildAgent[] specifiedBuildAgents)
{
foreach (IBuildDefinition buildDefinition in BuildDefinitionsToQueue)
QueueBuildDefinitionOnSpecifiedBuildAgents(buildDefinition, specifiedBuildAgents);
}
private static bool IsBuildTargetsDefinition(IBuildDefinition buildDefinition)
{
return buildDefinition.Name.Contains(".BuildTargets.");
}
private static bool IsBuildTasksDefinition(IBuildDefinition buildDefinition)
{
return buildDefinition.Name.Contains(".BuildTasks.");
}
private void QueueBuildDefinitionOnSpecifiedBuildAgents(IBuildDefinition buildDefinition, IBuildAgent[] specifiedBuildAgents)
{
IBuildRequest buildRequest = buildDefinition.CreateBuildRequest();
buildRequest.CommandLineArguments = "/p:prmQueueSelfOnAllOtherBuildAgents=false";
foreach (IBuildAgent buildAgent in specifiedBuildAgents)
{
if (buildAgent.Status == AgentStatus.Enabled)
{
buildRequest.BuildAgent = buildAgent;
buildServer.QueueBuild(buildRequest);
buildAgent.Refresh();
}
}
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I am currently working in an outsourced software product development company, PROTEANS SOFTWARE SOLUTIONS LTD.(www.proteans.com) as a Module Lead.