2013-04-30 51 views
2

我们目前有一个“相当”的CI不可知的MSBuild脚本,正在构建在TeamCity上。TFS不可知的MSBuild脚本

脚本执行以下操作:

  1. 版本使用TeamCity的版本号
  2. 编译溶液
  3. 运行使用NUnit
  4. 一组单元测试的组件属性运行一组接受使用NUnit和SpecFlow的测试
  5. 使用Pickles生成一些文档
  6. 存储工件小号
  7. 标签/标签的修订GIT与当前版本号

我说“相当” CI无关,因为有一对夫妇,我们通过MSBuild的消息任务内容发布到TeamCity的地方。

我们现在已经从业务部门获得指导,将构建和源代码从GIT移至TFS。我使用的最后一个Microsoft源代码控制是SourceSafe,我没有使用TFS作为CI服务器的经验。我想知道我们是否可以像现在一样将MSBuild脚本保持为不可知的,并且仍然实现它现在具有的相同功能。

回答

2

您可以轻松地从TFS Build中调用MSBuild脚本。我相信它要求构建解决方案的地方,你可以给它提供任何MSBuild文件(不知道我是否曾经指定过非sln文件),但如果由于某种原因不起作用,你可以做一个小的调整到TFS构建模板并使用MSBuild活动来调用您希望的任何MSBuild脚本。

您可以通过编辑构建模板(或通过编辑构建定义的静态参数)将动态参数传递给MSBuild。

对于版本控制,我通常会自定义生成模板以生成Major.Minor.YYMM.DDRRRR格式的版本号,其中Major和Minor是在Build Definition中设置的参数。 YYMMDD是日期,RRR是我从TFS BuildNumber Revision组件中提取的(今天为此构建版本构建的#号)。

我使用TFSVersion定制TFS建设活动从TFS Community Build Extensions更新我的所有程序集信息的,但如果你已经有版本的过程中你的MSBuild你可以生成生成模板所需的版本号,然后它作为参数传递到您的MSBuild活动。

至于发布文件回TFS你可以使用自定义的MSBuild任务(我确定某个地方存在,但我没有一个方便的链接),你可以调用tfs命令行工具,或者您可以使用提供的工作流程活动在构建模板(而不是MSBuild)中执行此操作。

+0

因此,关于版本控制,我们可以让tfs在包含内部版本号(如果可能的话)中包含内部版本号(或者TFS世界中的任何内容)的msbuild参数中进行推送?如何通过MSBuild将工件发布回TFS? – Bronumski 2013-05-01 14:10:07

+0

您可以通过编辑构建定义将静态参数推送到MSBuild。如果你想传入动态参数(比如TFS Build#),你可能需要编辑Build Template。 TFS有一个BuildID(一个int)和一个BuildNumber,它是一种可以在Build Def中自定义的格式的字符串(默认情况下它是$(BuildDefinitionName)_ $(Date:yyyyMMdd)$(Rev :.r) – 2013-05-01 17:09:43

+0

我已经开始构建,由于公司完全锁定构建环境导致无法访问NuGet,我必须做一些定制。除此之外,它运行的构建。我需要做的是将NUnit结果推回到TFS,以便它可以显示结果并在需要时构建失败。 – Bronumski 2013-06-10 13:55:27