0

背景:我将 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 拥有/运行。我不确定我错过了什么。
谢谢!

4

2 回答 2

0

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

于 2014-10-29T02:36:56.403 回答
0

您使用的是哪个版本的 TFS?在 2012 + 你可以通过一个选项设置它

有关从 TFS 获取最新信息时的详细信息时间戳,请参阅这篇文章中的答案,这 有关系吗?

于 2014-08-20T03:37:58.970 回答