或者,当一开始没有太多的构建流程时,实际上建立了一个构建流程。

目前,这几乎就是我的团队面临的情况。我们主要进行网络应用程序开发(但目前不进行桌面开发)。即使对于我们普通的应用程序来说,软件部署也是丑陋且笨拙的,而且在我加入这个团队(和公司)的两年里,我们遇到了太多的问题。是时候对此做点什么了,结果是我们将能够用一块石头杀死两只乔尔测试鸟(每日构建和一步构建,这两种构建都不以任何形式存在)。

我在这里寻求的是一些关于我需要做或思考的事情的一般见解,这些见解来自那些从事软件开发的时间比我更长并且头脑更聪明的人。我相信这将是目前在测试版中发帖的大多数人。

相关工具:Visual Build Source Safe 6.0(我知道,但是我目前是否使用SAFE,我无能为力。这可能是我的下一场战斗。)

暂时,我有一个 Visual Build 项目可以执行以下操作:

  1. 获取源代码并将其放置在本地目录中,包括项目所需的必要 DLL。
  2. 获取配置文件并根据需要重命名(我们将它们存储在一个特殊的子目录中,该子目录不属于实际应用程序的一部分,并且它们根据用途命名)。
  3. 使用 Visual Studio 构建
  4. 使用命令行预编译,复制到“build”目录中
  5. 复制到目的地。
  6. 获取任何必要的附加资源 - 主要是与项目相关的文档、图像和报告(并放入步骤 5 中的目录中)。这样的东西有很多,我以前不想包括它。但是,我只会复制更改的项目,所以也许这是无关紧要的。我不确定我是否真的想将这些内容包含在前面的步骤中。

对于所有这些,我仍然需要从 Visual Build 中注销一些,但我还没有到需要这样做的时候。

有人有什么建议或建议吗?我会指出,我们目前没有使用部署项目。我认为它将删除此构建中的一些必要步骤(例如 web.config 交换)。

有帮助吗?

解决方案

当承担一个从未有过自动化构建过程的项目时,分步骤进行会更容易。不要尝试一次吞咽太多,否则会感到难以承受。

  1. 首先使用自动构建程序一步编译代码(即南特/MSbuild)。我不会争论哪一个更好。找到一个让您感觉舒服的并使用它。让构建脚本与源代码管理中的项目一起使用。
  2. 弄清楚您希望如何触发自动构建。无论是将其连接到 CruiseControl 还是使用计划任务运行夜间构建任务。CruiseControl 或 TeamCity 可能是最佳选择,因为它们包含许多工具,您可以使用它们来简化此步骤。CruiseControl 是免费的,而 TeamCity 在一定程度上是免费的,您可能需要根据项目的规模付费。
  3. 好的,到此为止您将对这些工具感到非常满意。现在您可以根据您想要执行的测试、部署等操作添加更多任务...

希望这可以帮助。

其他提示

我有一组 Powershell 脚本可以为我完成所有这些工作。

脚本1:构建 - 这个很简单,主要是通过调用 msbuild 来处理,并且它还会创建我的数据库脚本。

脚本2:打包 - 这采用各种参数来打包各种环境的版本,例如测试和由许多机器组成的生产环境的子集。

脚本3:部署 - 这是从包脚本创建的文件夹中在每台计算机上运行(部署脚本作为打包的一部分复制)

在部署脚本中,我对计算机名称等内容进行健全性检查,这样就不会意外地将内容部署到错误的位置。

对于 web.config 文件,我使用

<appSettings file="Local.config">

具有生产机器上已有的覆盖功能,并且它们是只读的,因此不会意外被覆盖。Local.config 文件未签入,并且我不必在构建时进行任何文件切换。

[编辑] config 部分的 appSettings file= 的等效项是 configSource="Local.config"

两年前,我们从使用 Perl 脚本转向使用 MSBuild,并且从未回头。只需在主 xml 文件中指定它们即可构建 Visual Studio 解决方案。

对于更复杂的事情(获取源代码、执行单元测试、构建安装包、部署网站),您可以在 .net 中创建一个派生自的新类 任务 它会覆盖 Execute 函数,然后从构建 xml 文件中引用它。

这里有一个非常好的介绍:介绍

我只参与过几个 .Net 项目(我主要完成了 Java),但我建议的一件事是使用类似的工具 南安特. 。我在将我的构建耦合到 IDE 时遇到了一个真正的问题,它最终使得设置构建服务器变得非常痛苦,因为你必须在你想要构建的任何盒子上进行完整的 VS 安装。未来。

话虽这么说,任何自动化构建都比没有自动化构建好。

我们的构建过程是一堆自行开发的 Perl 脚本,这些脚本已经发展了十多年,没什么花哨的,但它完成了工作。一个脚本获取最新的源代码,另一个脚本构建它,第三个脚本将其暂存到网络位置。我们进行桌面应用程序开发,因此我们的暂存过程还构建安装包以进行测试并最终交付给客户。

我建议您将其分解为各个步骤,因为有时您想要重建但无法获取最新版本,或者可能只需要重新暂存。我们的脚本还可以处理来自不同分支的构建,因此无论您开发什么解决方案,也请考虑这一点。

最后,我们有一台专用的构建机器,每天晚上都会重建主干和维护分支,并发送一封电子邮件来说明任何问题或是否成功完成。

我建议的一件事是确保您的构建脚本(和安装程序项目,如果与您的情况相关)位于源代码管理中。我倾向于有一个非常简单的脚本,只需检查\获取最新的“主”构建脚本,然后启动它。

我说这个 b/c 我看到团队只是在服务器上运行最新版本的构建脚本,但要么从未将其放入源代码控制中,要么当他们这样做时,他们只是随机签入。如果您使构建过程从源代码管理中“获取”,它将迫使您将最新和最好的构建脚本保留在那里。

我们的构建系统是一个(或两个)makefile。让它工作起来相当有趣,因为它需要在 Windows(作为 VS 下的构建任务)和 Linux 下(作为正常的“make bla”任务)运行。真正有趣的是,构建从 .csproj 文件获取实际文件列表,从中构建(另一个)makefile,然后运行它。在这个过程中,make 文件实际上调用了它的 self.

如果这个想法没有吓到读者,那么(要么他们疯了,要么)他们可能可以让 make +“你最喜欢的字符串处理程序”为他们工作。

我们使用UppercuT。UppercuT 使用 NAnt 构建,并且非常易于使用。

http://code.google.com/p/uppercut/

这里有一些很好的解释: 上勾拳

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top