代码之家  ›  专栏  ›  技术社区  ›  Raminder

如何补偿开发机器和构建服务器之间的环境差异?

  •  2
  • Raminder  · 技术社区  · 16 年前

    我已经在我的机器上安装了NUnit“C:\Program Files\NUnit 2.4.8\”,但在我的集成服务器(运行CruiseControl.Net)上,我已经在“D:\Program Files\NUnit 2.4.8\”中安装了它。问题是,在我的开发计算机上,我的NAnt生成文件工作正常,因为在任务中,我使用路径“C:\Program Files\NUnit 2.4.8\bin\NUnit.Framework.dll”来添加对“NUnit.Framework.dll”程序集的引用,但同一生成文件无法在我的集成服务器上生成该文件(因为引用路径不同)。我是否必须将NUnit安装在集成服务器中的同一位置?这个解决方案对我来说似乎太严格了。有更好的吗?这类问题的一般解决办法是什么?

    6 回复  |  直到 13 年前
        1
  •  4
  •   James Gregory    16 年前

    自由基

    /MyApp
      /libs
        /NUnit
        /NAnt
        /etc...
      /src
        /etc...
    

        2
  •  1
  •   Jim Anderson    16 年前

    通常,应避免依赖于绝对路径。就CI而言,您应该能够完全从scatch在干净的机器上构建和运行您的解决方案,只使用通过自动化脚本在源代码控制中找到的资源。

        3
  •  1
  •   RB.    16 年前

    “终极”解决方案可以是将整个工具链存储在源代码管理中,也可以存储在源代码管理中构建的任何库/二进制文件。如果设置正确,这可以确保您能够从任何时间点完全按照发布时的样子重新生成任何版本,但是,此外,您不需要这样做,因为您生成的每个二进制文件都是源代码控制的。

        4
  •  0
  •       16 年前

    1) 使用具有不同路径的两个不同的登台脚本(开发构建/集成构建)。

        5
  •  0
  •   EricMinick    16 年前

    我同意绝对路径是邪恶的。如果您无法绕过它们,至少可以在脚本中设置默认为C:。。。在CI服务器中,在命令行中调用传入NUNIT_HOME属性的脚本。

    或者,您可以将脚本设置为需要设置NUNIT_HOME环境变量才能使NUNIT工作。现在,您的脚本要求nUnit在环境变量中存在并可用,而不是要求它所运行的机器在某个确切位置具有nUnit。

    这两种方法都允许您在不修改构建脚本的情况下更改正在使用的nunit版本,这是您想要的吗?

        6
  •  0
  •   Jeffrey Fredrick    16 年前

    将工具链中的所有工具置于版本控制之下是一个好主意。但是在您的路径上,您可以使用两种不同的技术为每台机器指定不同的路径。

    define a <property> 可以用 -Dname=value . 您可以使用它为您的开发计算机设置一个默认位置,并在CI系统中覆盖该位置。

    environment::get-variable 更改每台机器的位置。