TFS不可知MSBuild脚本

TFS不可知MSBuild脚本,build,msbuild,tfsbuild,Build,Msbuild,Tfsbuild,目前,我们有一个“相当”的CI不可知MSBuild脚本,该脚本正在TeamCity上构建 该脚本执行以下操作: 使用TeamCity内部版本号更新部件属性 编译解决方案 使用NUnit运行一组单元测试 使用NUnit和SpecFlow运行一组验收测试 使用pickle生成一些文档 存储工件 使用当前版本号在GIT中标记修订 我之所以说“相当”的CI不可知,是因为有几个地方我们通过MSbuild消息任务向TeamCity发布内容 现在,我们已经从业务部门获得了将构建和源代码从GIT移动到TFS的指

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

该脚本执行以下操作:

  • 使用TeamCity内部版本号更新部件属性
  • 编译解决方案
  • 使用NUnit运行一组单元测试
  • 使用NUnit和SpecFlow运行一组验收测试
  • 使用pickle生成一些文档
  • 存储工件
  • 使用当前版本号在GIT中标记修订
  • 我之所以说“相当”的CI不可知,是因为有几个地方我们通过MSbuild消息任务向TeamCity发布内容


    现在,我们已经从业务部门获得了将构建和源代码从GIT移动到TFS的指示。我上次使用的Microsoft源代码管理是SourceSafe,我没有使用TFS作为CI服务器的经验。我想知道我们是否可以保持MSBuild脚本与当前一样不可知,并且仍然可以实现与现在相同的功能。

    您可以轻松地从TFS Build调用MSBuild脚本。我相信,在它要求生成解决方案的地方,您可以给它任何MSBuild文件(不知道我是否指定过非sln文件),但是如果由于某种原因,这不起作用,您可以对TFS构建模板进行一个小的调整,并使用MSBuild活动调用您想要的任何MSBuild脚本

    可以通过编辑生成模板将动态参数传递给MSBuild(或通过编辑生成定义将静态参数传递给MSBuild)

    对于版本控制,我通常自定义构建模板以生成格式为Major.Minor.YYMM.ddrrr的版本,其中Major和Minor是构建定义中设置的参数。YYMMDD是日期,我从TFS BuildNumber修订组件中提取RRR(今天为这个构建定义构建什么)

    我使用中的TFSVersion自定义TFS生成活动来更新我的所有AssemblyInfo,但如果您的MSBuild中已经有版本控制过程,则可以在生成模板中生成所需的版本,然后将其作为参数传递给MSBuild活动


    至于将文件发布回TFS,您可以使用自定义MSBuild任务(我确信某个地方存在一个任务,但我手头没有链接),您可以调用TFS命令行工具,也可以在生成模板(而不是MSBuild)中执行此操作使用提供的工作流活动。

    那么,关于版本控制,我们可以让tfs推入一个msbuild参数,该参数包含内部版本号,如果可能,还包含tfs修订号(或tfs世界中的任何内容)?如何通过MSBuild将构件发布回TFS?可以通过编辑生成定义将静态参数推入MSBuild。如果要传入动态参数(如TFS Build#),可能需要编辑生成模板。TFS有一个BuildID(int)和一个BuildNumber,BuildNumber是一个字符串,其格式可以在BuildDef中自定义(默认为$(BuildDefinitionName)$(日期:yyyyymmdd)$(版本:.r)我已经开始构建,我不得不做一些定制,因为公司完全锁定了构建环境,导致无法访问NuGet。除此之外,它运行构建。我需要能够做的是将NUnit结果推回到TFS,以便它可以显示结果,并在需要时使构建失败。