Build 实现单脚本构建-非可移植依赖项

Build 实现单脚本构建-非可移植依赖项,build,msbuild,build-automation,build-script,Build,Msbuild,Build Automation,Build Script,构建系统的最佳实践似乎是使用一个脚本来构建所有源代码并打包发行版。看 如何解释不可移植的依赖关系?例如,如果您为.net 4编写代码,则需要在机箱上安装.net 4。标准MS release.NET4不是xcopy可部署的(除非我弄错了?)。我可以看到一些途径: 依赖关系在某些资源文件(wiki、txt等)中有明确的说明。当你 调用构建脚本,如果没有安装依赖项,则构建将失败。这是一个可以接受的结果 构建脚本负责设置环境。因此,如果您需要.NET4,而它不在机箱中,那么它会为您安装它 #2的一种风

构建系统的最佳实践似乎是使用一个脚本来构建所有源代码并打包发行版。看

如何解释不可移植的依赖关系?例如,如果您为.net 4编写代码,则需要在机箱上安装.net 4。标准MS release.NET4不是xcopy可部署的(除非我弄错了?)。我可以看到一些途径:

  • 依赖关系在某些资源文件(wiki、txt等)中有明确的说明。当你 调用构建脚本,如果没有安装依赖项,则构建将失败。这是一个可以接受的结果
  • 构建脚本负责设置环境。因此,如果您需要.NET4,而它不在机箱中,那么它会为您安装它
  • #2的一种风格-该脚本没有安装依赖项,而是生成一个预打包的映像(虚拟机,Amazon EC2 AMI),该映像使用所有依赖项进行设置
  • 第2条是“你能一步完成一个构建吗?”如前所述,这意味着开发团队要想有效,构建过程必须尽可能简单,以减少构建过程中的错误并确保一致性。随着团队规模的扩大,这一点尤为重要。你要确保每个人都在建造同样的东西。(使用该包所做的工作也应该很简单,但在IMHO中没有那么重要。)Msbuild在这方面做得很好;它们提供了设置独立访问源代码管理系统的构建服务器的工具,因此开发人员的操作不会破坏构建环境。我强烈建议使用TFS设置构建服务器——许多构建问题都会消失,您将获得Joel描述的单击一次的构建


    至于您对该软件包的部署功能的看法,您可以使用MS进行多种选择,但“单击”越多越好。我相信这和乔尔的2有些不同。在他的例子中,他描述了更改安装时使用的软件,这并不是因为执行的步骤更少,而是因为可以将一个软件合并到一个一步构建中。

    要实现构建脚本,你必须问自己,你想要/可以在它上花费多少工作。这就引出了一个问题:您必须多久设置一次构建环境。我可以看出#2是一个完美的解决方案,但我需要做很多工作,因为通常您有多个不可移植的依赖项

    因此,我们使用#1。而且它工作得很好。最重要的是,构建脚本从某种自检开始。它会查找构建整个软件所需的所有内容,如果没有找到某个内容,则会给出一个错误。它给出了一个明确的错误信息,这样任何一个新手都知道如何让它运行。当然,与许多软件一样,它几乎从未完成,并根据需要进行扩展。当整个构建过程需要超过分钟时,此测试可能需要几秒钟的缺点是无关紧要的

    对于我们来说,一个带有设置解决方案的wiki(甚至其他东西)不是一个好的解决方案,因为三个月后没有人知道它在哪里,但是构建脚本每天都在使用


    构建脚本本身是一组不同的东西,根据需要选择。它是从一个批处理(我们使用的是Windows)开始的,它调用了很多其他东西。其他批处理、MSBuild、自制工具。it self的每一步都在检查自己的依赖关系,以使问题成为局部问题,您可以在后面的三行中看到为什么需要这个特殊的东西。

    Hi Hogan-我认为这是对test#2的一个很好的扩展,但并没有真正回答我关于不可移植依赖关系的问题。我同意构建服务器是个好主意(我使用TeamCity而不是TFS)。我在寻找实现细节——当存在不可移植的依赖项时,人们具体如何遵守Joel test#2?@SFun28我想简单的答案是制作一个不可移植的单步构建。所以我认为你在我的原始帖子中提倡#1。开始赏金。我正在寻找类似于上面我的#1-3的实施细节,以及该方法的理由。谢谢!这似乎是一个切实有效的战略。我会在最后一刻等待任何答案,然后再颁发赏金