Jenkins:如何从TFS存储库构建多个项目?

Jenkins:如何从TFS存储库构建多个项目?,tfs,continuous-integration,jenkins,Tfs,Continuous Integration,Jenkins,我已将我的工作区目录设置为C:\jenkins\u builds\workspace,我想构建ProjA和ProjB,每个目录都有一个本地工作文件夹(与项目名称相同) 从我的存储库获取源代码时,TFS插件要做的前两件事是: tf workspace -new %workspace-name-A%;%user-name% -server:%my-server% tf workfold -map $%branch% ProjA -workspace:%workspace-name-A% -serv

我已将我的工作区目录设置为
C:\jenkins\u builds\workspace
,我想构建
ProjA
ProjB
,每个目录都有一个本地工作文件夹(与项目名称相同)

从我的存储库获取源代码时,TFS插件要做的前两件事是:

tf workspace -new %workspace-name-A%;%user-name% -server:%my-server%

tf workfold -map $%branch% ProjA -workspace:%workspace-name-A% -server:%my-server%
在构建
ProjA
时,这一切正常。问题是,第一个命令将根目录从存储库直接映射到我的
C:\jenkins\u builds\workspace
目录。第二个命令执行我实际需要的操作,即将
%branch%
映射到
ProjA
子文件夹。稍后,在生成
ProjB
时,第一个命令失败(因此生成失败),并显示以下错误消息:

The path C:\jenkins_builds\workspace is already mapped in workspace %workspace-name-A%;%user-name%.
好的,将根目录映射到工作目录似乎不是个好主意。但是,为什么当TFS插件运行
工作区new
行时会自动发生这种情况呢?目前,我必须通过运行-unmap命令来清理构建
ProjA
ProjB
之间的事情


我的团队使用Team Foundation 3。

我们有相同的情况,有2种方法来解决这个问题:

  • 为两个版本使用不同的工作区根目录
    这导致需要两个签出=>两倍的空间和较慢的速度,但两个构建之间的隔离更好
  • “硬编码”两个版本的工作区名称相同
    默认情况下,jenkins创建一个包含构建名称的工作区,该名称可以在TFS配置的“高级”部分中更改,然后您可以对多个构建使用相同的工作区-/workfolder映射-在本例中,我们称它们为
    ProjectName\u${NODE\u name}
    ,因此它甚至可以在多个节点上工作

谢谢您的建议!第二种解决方案对我们来说似乎已经足够好了,尽管它可能有一些缺点。但我们未能使用您的第一个解决方案。如果我没有弄错的话,Jenkins的工作区根目录是全局的,对吗?您能解释一下如何实现第一个解决方案吗?不,Jenkins中的每个作业都有自己的工作区根-如果您的构建有相同的根,那么您必须已经更改了它们;默认情况下,它是
${ITEM_ROOTDIR}/workspace
(在点击“advanced”后在顶部的主要jenkins设置中找到)…值得一提的是,造成这种情况的不是
workspace-new
行,而是创建工作文件夹映射的第二行。对于工作区内的服务器路径,工作文件夹映射必须是唯一的。Edward,感谢您的反馈。这就是我最初的想法。第二行创建分支名称和项目子文件夹之间的映射(正如人们所想)。但是,在从命令提示符运行命令后,第一个命令实际上将TFS存储库中的工作文件夹“C:\jenkins\u builds\workspace”映射为“$/”。很反直觉,对吧?这就是我头痛的原因。