仅在TeamCity中发布构建的.sln文件工件

时间:2012-12-24 06:43:20

标签: .net build msbuild continuous-integration teamcity

我们有一个包含大约6个.sln文件的git存储库。 每个解决方案大约有15个项目。

我们还使用TeamCity轮询我们的git存储库,并在发现任何更改的情况下进行构建。

我想用以下内容增强我们的构建:

  1. 构建通过提交实际更改的项目。
  2. 发布作为构建工件更改的输出(在TeamCity中)。
  3. 例如,如果开发人员更改了2个不同项目中的文件,则只会重建那些项目,并且只会将其输出作为当前构建的输出复制到某个位置。

    第一点可以使用“构建”目标,但是我找不到某种方法只能在某处复制已构建项目的输出。

2 个答案:

答案 0 :(得分:1)

我认为没有办法开箱即用,我也不知道相关的插件。但是,您可以通过将构建生成的新二进制文件与以前的二进制文件进行比较并仅发布不同的二进制文件来实现所需的结果。

你应该使用一个知道EXE和DLL文件结构的diff工具,并且可以忽略每个构建时改变的东西 - 时间戳,PDB guids,签名等。这个问题已在SO上讨论了好几次。例如,Deterministic builds under Windows

答案 1 :(得分:1)

TeamCity提供VCS触发器规则,您可以使用该规则仅在仓库中特定路径下的文件发生更改时触发构建。您可以将这些规则与Checkout Rules一起使用,Checkout Rules用于微调从repo中实际拉下的内容。

http://confluence.jetbrains.net/display/TCD7/Configuring+VCS+Triggers#ConfiguringVCSTriggers-VCSTriggerRules

http://confluence.jetbrains.net/display/TCD7/VCS+Checkout+Rules

VCS触发/结帐规则在Build Configuration级别定义。理论上,您可以监视单个项目中的更改,触发针对该项目的.csproj文件的构建。您的工件只是单个项目的输出。但实际上,您可能不希望每个项目都有构建配置。

单个回购中的6种解决方案,就像你从SVN或TFS这样的东西迁移一样。如果可能的话,我建议你把每个sln放在自己的Git仓库中。如果您使用6个slns来“管理”包含90个项目的单一应用程序,那么您还有其他一些挑战。

希望这会有所帮助,但有关您的回购和项目的更多信息会有所帮助!