【问题标题】:How do I link multiple TFS 2012 Build Definitions into a single build definition如何将多个 TFS 2012 构建定义链接到单个构建定义中
【发布时间】:2013-07-25 14:43:53
【问题描述】:

我如何或可以在 TFS 2012 中创建构建定义的层次结构?

我目前有一个调用多个子脚本 (.cmd) 的主构建脚本 (.cmd)。
我想将此迁移到 TFS 构建系统并维护层次结构。

我似乎无法弄清楚这是否可以使用 TFS 2012 构建系统。

这就是我要说的: MasterBuildScript.cmd 调用组件脚本1 调用组件脚本2 调用组件script3 称呼 ... 调用所有组件的打包例程

componentscript1.cmd 构建解决方案组件a1 构建解决方案组件a2 构建解决方案组件a3 ...

componentscript2.cmd 构建解决方案组件b1 构建解决方案组件b2 构建解决方案组件b3 ...

更多组件...

有没有办法使用标准的 TFS 2012 构建定义来做到这一点? - 布鲁斯

【问题讨论】:

  • 当然可以通过编写自定义代码/活动从主构建定义中调用多个构建定义。但是你到底想达到什么目的?如果您的 CMD 文件只是编译解决方案文件,为什么要继续使用它们?你是在做这些子脚本来处理依赖关系还是其他什么?是什么情况迫使您保留多个构建定义?详细解释!

标签: tfs build-automation


【解决方案1】:

有一种方法可以在不进行任何自定义编码的情况下做到这一点。但是,您必须对构建过程模板进行少量添加。这不使用代码,它使用 Windows Workflow Foundation。

基本上,您需要为当前拥有的每个 .cmd 构建脚本设置 TFS Team Build 定义。一个用于主构建,一个用于每个组件构建。这里涉及的真正工作是将您的 .cmd 脚本转换为 TFS 构建定义。

然后,要自动对“子”构建进行排队,您可以编辑主构建定义的流程模板并添加“InvokeProcess”活动 - 这可以让您在构建过程中使用命令行。您可以使用命令行实用程序 TFSBuild.exe 启动“子”构建。 http://msdn.microsoft.com/en-us/library/aa337622(v=vs.90).aspx

我过去使用过类似的东西,我为我的核心程序集构建了一个版本。然后,该构建会启动所有依赖于这些程序集的构建。

【讨论】:

  • 是的,您可以通过使用 InvokeProcess 并调用 CMD 脚本来执行此操作,我知道这一点。但是您提到的解决方案有很多缺点。可以说,您创建了一个仅调用 CMD 脚本的构建定义,那么您绝对无法控制 TFS 发生的事情。您正在产生一个新进程,该进程正在运行。如果您想停止正在运行的构建,那么如果您只是在 TFS 中停止构建,它不会停止它。批处理文件仍将运行。这只是一个例子。
  • 这就是为什么我想知道他的根本问题,然后提出解决方案。仅从 TFS build def 运行 CMD 脚本并不是最好的解决方案。
  • 从构建定义中调用现有的 .cmd 脚本并不是我的建议。你是对的,这是一个可怕的想法。重新阅读我的回复,我可以看到您可能是如何解释它的。这些 .cmd 脚本需要转换为 TFS 构建定义,它执行与原始 .cmd 脚本相同的工作。唯一应该使用 InvokeProcess 活动的是通过 TFSBuild.exe 启动“子”构建。
猜你喜欢
  • 2014-09-06
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 2013-01-01
  • 2014-05-20
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
相关资源
最近更新 更多