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}
${ITEM_ROOTDIR}/workspace
(在点击“advanced”后在顶部的主要jenkins设置中找到)…值得一提的是,造成这种情况的不是workspace-new
行,而是创建工作文件夹映射的第二行。对于工作区内的服务器路径,工作文件夹映射必须是唯一的。Edward,感谢您的反馈。这就是我最初的想法。第二行创建分支名称和项目子文件夹之间的映射(正如人们所想)。但是,在从命令提示符运行命令后,第一个命令实际上将TFS存储库中的工作文件夹“C:\jenkins\u builds\workspace”映射为“$/”。很反直觉,对吧?这就是我头痛的原因。