你如何将多个TFS回购拉入单个Jenkins工作?

时间:2012-05-03 12:13:02

标签: tfs jenkins jenkins-plugins

我有一个包含2个子文件夹$ / Repo / project和$ / Repo / thirdparty的repo。我需要将这两者都拉到Jenkins中进行单一构建。当然,我试着拉动$ / Repo,但这给了我一些其他项目以及错误的民意调查(每次将任何东西检入$ / Repo时都会建立)。我已经尝试使用多scm插件工作,但不保存配置(烦人,但不是无法使用)。我尝试使用常规tfs插件并手动将其他repo的调用放入windows命令(即使通过我将它们绑定到不同的文件夹,这也无法工作)。

最好的方法是什么?吸引第三方的某种subjob?修复多个scm插件?拉动项目时是否有一些tfs命令或触发器来拉动不同的仓库?

6 个答案:

答案 0 :(得分:5)

我能够使用作业管道。它有点像hacky,但它确实有效。

我正在尝试构建的程序使用$/Department/Framework/Mainworkspace\Framework)和$/Department/Products/TheProgram/Mainworkspace\TheProgram)。

我在Jenkins创造了三个工作岗位,每个工作都在另一个工作的下游:

  • Framework-Get:在$/Department/Framework/Main的TFS项目路径上触发正常的源代码。没有构建步骤。
  • TheProgram-Get:正常源代码触发TFS'{1}}的产品路径。没有构建步骤。
  • TheProgram-Build:没有源代码控制。但构建步骤xcopy是上述两个步骤的来源。然后,您可以运行正常的构建步骤。

TheProgram-Build的第一个构建步骤是一个Windows批处理命令:

REM ====================================
REM First Get the Framework folder:
rmdir /s/q Framework
mkdir Framework
xcopy /y /q /e ..\..\Framework-Get\Workspace\Framework Framework

REM ====================================
REM Then Get the TheProgram Folder:
rmdir /s/q TheProgram 
mkdir TheProgram 
xcopy /y /q /e ..\..\TheProgram-Get\Workspace\TheProgram TheProgram

第二个构建步骤是对ant的简单调用。但是你可以使用msbuild或者你喜欢的任何东西。

答案 1 :(得分:2)

Jenkins的TFS插件目前不支持从多个位置检出来源。 multi-scm-plugin可能就是答案,但正如你在问题中指出的那样 - 在这一点上它实际上不是一个选项。到目前为止,我可以看到,只有可能的解决方案供您测试:

  1. 在TFS中创建一个包含所有必要导入的工作区。我在TFS的每一天遇到过这个功能,虽然我从未有机会使用Jenkins插件。它可能会起作用,也可能不起作用。
  2. 你可以使用,请 - 这是一个非常严肃的选择,至少对我而言 - git。有一个git-tfs并将所有必需的项目导入到git存储库中。将它们放在git中会为你打开一堆可能性,包括为每个文件夹使用单独的repos,使用git模块,git externals ......等等。所以,至少对我来说,它是一个有效的选择,虽然它看起来像一个丑陋的解决方案,第一眼看上去......

答案 2 :(得分:1)

TFS插件支持隐藏您不感兴趣的$\Repo文件夹。检查隐藏文件夹不会触发构建。不幸的是,这可能是很多文件夹而你只对两个感兴趣 - 你需要保留隐藏文件夹的列表,因为新的文件夹被添加。

我们避免使用TFS插件,而是使用tfs命令行通过powershell步骤编写TFS工作区的设置。每个构建指定它想要的文件夹,并且脚本负责隐藏/隐藏其余的文件夹。

答案 3 :(得分:0)

我的解决方案是创建两个Job,一个只下载你的依赖,另一个来构建。

在我的情况下,我使用Maven属性管理构建,例如:

的pom.xml

<properties>
  <my.dir>../MyDir</wsdl.dir>
</properties>

Jenkins Build

Goals clean package -U -Dmy.dir=${WORKSPACE}/../../another-build/workspace/MyDir

答案 4 :(得分:0)

我必须自己为詹金斯创建一个解决方法。这是使用TF和powershell Snapin Microsoft.TeamFoundation.PowerShell实现的。

基本上工作流程如下:

Get-TFsWorkspace(Powershell:检查工作区)

TF Workspace / new(创建工作区)

TF Workfold / unmap(使用它来删除在工作空间创建期间创建的默认$ / mapping)

TF Workfold / map(映射特定位置,即$ / Repo / project)

TF Scorch(删除任何文物,如果有的话)

TF Get(获取代码)

人们可能还有其他方法,但这也允许你使用tf Workfold / cloak功能。

干杯,

希望这有帮助。

答案 5 :(得分:0)

可以确认Multiple SCM 0.5适用于Team Foundation Server插件4.0

然而,民意调查似乎确实破裂了。