使用耙子建造环保建筑的首选方法?(来自Msbuild/Nant)

使用耙子建造环保建筑的首选方法?(来自Msbuild/Nant),msbuild,continuous-integration,rake,build-automation,nant,Msbuild,Continuous Integration,Rake,Build Automation,Nant,我已经编写并维护了很多Nant/Msbuild文件,在当前的一个项目中遇到了一些问题,在这个项目中,rake似乎会让我的生活变得更轻松。然而,在第一个障碍上,我有点不知所措,但这可能是因为我是从南特的角度看问题的 这里给出一些上下文是我通常期望构建的布局(忘记实际的物理结构,看看它的组件是什么): 现在,正如您在上面所看到的,构建的主要组件是构建脚本,它包含实际的构建指令,构建属性,这些文件纯粹包含每个环境的属性。i、 e dev.properties可能包含web.service.url=”h

我已经编写并维护了很多Nant/Msbuild文件,在当前的一个项目中遇到了一些问题,在这个项目中,rake似乎会让我的生活变得更轻松。然而,在第一个障碍上,我有点不知所措,但这可能是因为我是从南特的角度看问题的

这里给出一些上下文是我通常期望构建的布局(忘记实际的物理结构,看看它的组件是什么):

现在,正如您在上面所看到的,构建的主要组件是构建脚本,它包含实际的构建指令,构建属性,这些文件纯粹包含每个环境的属性。i、 e

dev.properties可能包含
web.service.url=”http://some.dev.address“
live.properties可能包含
web.service.url=”http://some.live.address“

还有一些工具是构建脚本使用的外部可执行文件,如Nant、Nunit、JsTestDriver等

现在关注我的default.build文件,它倾向于包含大量的前期属性,例如所使用的目录(即libs、output、package、project、tests),因此可以对它们进行前期评估。然后,其他*.build文件包含相关的构建脚本,例如tests.build将处理Nunit并运行单元/集成/验收测试等

我这里的主要问题是,我有这些为每个环境配置构建的环境属性,还有许多预定义属性,当从命令行调用时,这些属性会被覆盖,也就是说,如果您是为活动环境构建,您将传递environment=live,或者,如果将其留空,它将默认环境为dev,而在CI服务器上,它将环境设置为CI

我所能找到的示例似乎都没有告诉我如何使用Rake命令行覆盖默认属性/变量,我知道您可以设置属性并通过Env[]机制将其取出,但要使用它,我需要将一个全局变量设置为正常值,然后执行一个步骤,检查传入的任何环境变量,并用这些属性覆盖全局变量,而且我能看到的允许外部配置文件的唯一方法是使用其中的全局变量并将其包含在内,我不介意这样做,但我希望在这方面有一些最好的做法可以学习

另外,我考虑的最后一件事是,实际上唯一要传入的变量是环境(dev、ci、live等),因此我可以使默认构建任务需要传入一个参数,这是受支持的,但不确定这是否是最好的,因为如果没有设置,我希望它作为“dev”运行,这意味着你总是需要设定一个(而不是世界末日)


正如您所看到的,在这个领域有很多问题,采用我现有的方法并尝试将其调整为与Rake一起工作。任何建议或信息都会很好

这不是正确的答案,但我基本上保持了与上面相同的软结构,并对所有内容使用全局变量。因此,我有一个属性文件,其中包含如下内容:

$dir["project"] = "c:/Some/Project/Dir"
$dir["tests"] = "c:/Some/Tests/Dir"
$settings["auto-migrate-deltas"] = true
这并不是很理想,但它允许我根据环境注入不同的属性,它还使许多构建文件的可重用性降低,因为它们都使用这些全局变量。使用基于参数的任务可能会使它更具可重用性,但在这方面没有大量的文档和工作示例,因此我将坚持使用以下系统,直到发现一个主要问题

$dir["project"] = "c:/Some/Project/Dir"
$dir["tests"] = "c:/Some/Tests/Dir"
$settings["auto-migrate-deltas"] = true