當創建TFS通過API構建的定義,我需要先刪除,如果定義預先存在:刪除構建定義
if (BuildServer.QueryBuildDefinitions(teamProject).Any(d => d.Name == buildDefinitionName))
{
buildDefinition = BuildServer.GetBuildDefinition(teamProject, buildDefinitionName);
var builds = BuildServer.QueryBuilds(buildDefinition);
if (builds != null && builds.Any())
{
Console.WriteLine("delete {0} builds for build definition: {1}", builds.Count(), buildDefinition.Name);
BuildServer.DeleteBuilds(builds);
}
if (buildDefinition.Workspace.Mappings.Any())
{
var mappings = buildDefinition.Workspace.Mappings.Select(m => m.ServerItem).ToArray();
foreach (var mapping in mappings)
{
Console.WriteLine("remove workspace mapping: {0}", mapping);
buildDefinition.Workspace.RemoveMapping(mapping);
}
}
Console.WriteLine("delete build definition: {0}", buildDefinition.Name);
BuildServer.DeleteBuildDefinitions(new[] { buildDefinition });
}
這個工程一樣後續:
buildDefinition = BuildServer.CreateBuildDefinition(teamProject);
buildDefinition.Name = buildDefinitionName;
然而,當第一次構建獲取運行,它會引發衝突的有關工作區的錯誤:
Exception Message: Unable to create the workspace 'some-new-workspace' due to a mapping conflict. You may need to manually delete an old workspace. You can get a list of workspaces on a computer with the command 'tf workspaces /computer:%COMPUTERNAME%'.
Details: The path C:\some-path is already mapped in workspace some-old-workspace. (type MappingConflictException)
一您可以在第一個代碼段中看到,我嘗試刪除工作空間爲.Workspace.RemoveMapping()
,但沒有任何效果。工作區仍然存在於構建控制器上。我可以手動刪除它們,但是當我刪除構建定義時,它們確實應該被刪除。 API中有其他一些DeleteWorkspace()
機制嗎?
更完整的代碼要點是在這裏:https://gist.github.com/grenade/cce374cb4e27e366bc5b