【问题标题】:TFS workspaces "Error trying to get mapping"TFS 工作区“尝试获取映射时出错”
【发布时间】:2014-10-29 10:36:56
【问题描述】:

背景:我将 Bamboo 用于多个项目(业务需求)作为构建和部署控制器,并将 TFS 作为存储库。作为构建过程的一部分,TFS 插件为构建服务器上的项目创建工作区。映射有效且正确:

Owner: CORP\TFSSERVICE
Workspace Name : Bamboo_BLUEM-BLUE-JOB1_9c48a010_TEST-BAMBOO
Source Folder: $/Project/Monitoring
Local Folder : C:\bamboo-home\xml-data\build-dir\BLUEM-BLUE-JOB1\builds\sources\Project\Monitoring

这适用于执行GETS 和构建。然而,一个副作用(来自 TFS 插件,我假设)是文件的时间戳记到它们在本地被拉取的时间。我需要时间戳来匹配它们在源代码中的内容。

我可以通过以下预构建步骤在纯 TFS/MSbuild(非竹)环境中执行此操作:

workspace = versionCtrlSrvr.GetWorkspace(strSourcePath);
ItemSet itemSet = versionCtrlSrvr.GetItems(strSourcePath, RecursionType.Full);
foreach (Item item in itemSet.Items)
{
   string localPath = workspace.GetLocalItemForServerItem(item.ServerItem);
   if (item.ItemType == ItemType.File)
   {
      ProcessFile(item, localPath);
   }
   else if (item.ItemType == ItemType.Folder)
   {
      ProcessDirectory(item, localPath);
   }
}
 private static void ProcessFile(Item itemTFS, string localPath)
 {
    //change FileInfo modify time
 }
 private static void Processdirectory(Item itemTFS, string localPath)
 {
    //change FileInfo modify time
 }

但是,当我在 Bamboo 服务器上运行此代码时,GetWorkspace 会引发异常:

Error trying to get mapping :
There is no working folder mapping for 
C:\bamboo-home\xml-data\build-dir\BLUEM-BLUE-JOB1\builds\sources\Project\Monitoring

这不是真的,Sidekick 可以证实这一点。

但由于错误提示不存在映射,我尝试使用以下代码创建另一个映射:

Console.WriteLine("Creating temporary workspace mapping : tempDLworkspace");
workspace = VersionControlServer.CreateWorkspace("tempDLworkspace");
WorkingFolder workfolder = new WorkingFolder(
@"$/Project/Monitoring", 
@"C:\bamboo-home\xml-data\build-dir\BLUEM-BLUE-JOB1\builds\sources\Project\Monitoring");
workspace.CreateMapping(workfolder);

这样做会给我一个例外,说映射确实存在:

Creating temporary workspace mapping : tempDLworkspace
Download completed with errors.   LastError : 
Error downloading file. The working folder 
C:\bamboo-home\xml-data\build-dir\BLUEM-BLUE-JOB1\builds\sources\Project\Monitoring
is already in use by the workspace 
Bamboo_BLUEM-BLUE-JOB1_9c48a010_TEST-BAMBOO;CORP\TFSSERVICE
on computer TEST-BAMBOO.

所以最后,我无法读取映射,因为我被告知它不存在,并且由于现有映射,我无法创建新映射!我不确定为什么这不起作用。


编辑 - 我可以通过调用重写的 .GetWorkspace() 方法来获取工作区对象:

workspaceName =@"C:\bamboo-home\xml-data\build-dir\BLUEM-BLUE-JOB1\builds\sources\Project\Monitoring";
workspace = VersionControlServer.GetWorkspace(workspaceName, @"CORP\TFSSERVICE");

这会得到我想要的结果,但需要我知道 Bamboo 给工作区的名称。我仍然希望能够仅从本地路径获取工作区定义。构建、时间戳和工作空间都由相同的身份 TFSSERVICE 拥有/运行。我不确定我错过了什么。
谢谢!

【问题讨论】:

    标签: tfs msbuild workspace bamboo mappings


    【解决方案1】:

    您使用的是哪个版本的 TFS?在 2012 年 + 您可以通过选项进行设置

    详情请参阅本帖中的答案 timestamp when Getting Latest from TFS and does it matter?

    【讨论】:

    • 我们使用的是 2010。而且,是的,在这种情况下它很重要。我们的组件是根据时间戳发布、索引和缓存的。当然这并不理想,但重新设计部署过程是一个完全长期的项目。
    【解决方案2】:

    您每次构建时都会删除映射吗?如果插件每次使用相同的路径运行时都创建工作空间映射,您将收到“工​​作空间已存在”错误。如果是这样,请添加最终任务以删除工作区。这将确保下次运行此作业时没有映射。

    【讨论】:

      猜你喜欢
      • 2018-11-21
      • 2013-07-01
      • 2013-03-24
      • 2013-10-28
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 2010-11-01
      相关资源
      最近更新 更多