改善您的构建过程

时间:2008-08-18 16:48:50

标签: build-process build-automation build

或者,实际上建立一个构建过程,当没有多少人开始构建时。

目前,这正是我的团队面临的情况。我们主要进行网络应用程序开发(但目前没有桌面开发)。即使使用我们适度的应用程序,软件部署仍然难以操作,而且我在这两年(我和公司)的一部分中已经出现了太多问题。现在是时候做点什么了,结果是我们能够用一块石头杀死两只Joel Test鸟(每日构建和一步构建,两者都不以任何形式存在)。

我在这里所得到的是对我需要做的事情或者思考的事情的一般性见解,从那些从事软件开发的时间超过我的人,也有更大的脑子。我相信大多数人目前都会在测试版中发布。

相关工具: 视觉构建 Source Safe 6.0(我知道,但我现在无法做任何关于我们是否使用Source Safe的事情。这可能是我战斗的下一场战斗。)

暂时,我有一个Visual Build项目可以做到这一点:

  1. 获取源并放置在本地目录中,包括项目所需的必要DLL。
  2. 获取配置文件并根据需要重命名(我们将它们存储在不属于实际应用程序的特殊子目录中,并根据用途命名)。
  3. 使用Visual Studio构建
  4. 使用命令行进行预编译,复制到“build”目录
  5. 复制到目的地。
  6. 获取任何必要的额外资源 - 主要是与项目相关联的文档,图像和报告(并从步骤5放入目录)。有很多这样的东西,我不想先包括它。但是,我只会复制更改的项目,所以也许它无关紧要。我不确定我是否真的想在之前的步骤中包含这些内容。
  7. 我仍然需要在Visual Build中哄骗一些日志记录,但是我还没有达到我需要这样做的程度。

    有没有人有任何建议或建议?我注意到,我们目前没有使用部署项目。它会删除我假设的这个构建中必需的一些步骤(比如web.config交换)。

8 个答案:

答案 0 :(得分:18)

在承担从未进行过自动构建过程的项目时,更容易采取步骤。不要试图一次吞下太多,否则会感到压力很大。

  1. 首先使用自动构建程序(即nant / msbuild)一步编译代码。我不打算辩论哪一个更好。找一个让你感觉舒服并使用它的人。让构建脚本与源代码管理中的项目一起使用。
  2. 了解您希望如何触发自动构建。无论是将其连接到CruiseControl还是使用计划任务运行每晚构建任务。 CruiseControl或TeamCity可能是最佳选择,因为它们包含许多工具,您可以使用它们来简化这一步骤。 CruiseControl是免费的,TeamCity是免费的,您可能需要根据项目的大小来支付费用。
  3. 好的,到目前为止,您对这些工具非常满意。现在,您已准备好根据要执行的测试,部署等操作添加更多任务...
  4. 希望这有帮助。

答案 1 :(得分:9)

我有一套Powershell脚本可以为我完成所有这些。

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

脚本2:包 - 这个包含各种参数来打包各种环境的发布,例如测试,以及由许多机器组成的生产环境的子集。

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

从部署脚本中,我会检查机器名称之类的内容,以便不会意外地将其部署到错误的位置。

对于web.config文件,我使用

<appSettings file="Local.config">

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

[编辑]相当于appSettings file = for config部分是configSource =“Local.config”

答案 2 :(得分:5)

两年前我们从使用perl脚本切换到MSBuild并且没有回头。 构建visual studio解决方案只需在主xml文件中指定即可完成。

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

这里有一个很好的介绍: introduction

答案 3 :(得分:1)

我只参与了几个.Net项目(我主要完成了Java)但我建议使用像NAnt这样的工具。我将构建与IDE耦合存在一个真正的问题,它最终使得构建服务器变得非常痛苦,因为你必须在你想要构建的任何盒子上进行完整的VS安装。将来

话虽如此,任何自动构建都比没有自动构建更好。

答案 4 :(得分:1)

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

我建议你将其分解为单独的步骤,因为有时候你想要重建但没有得到最新的,或者只是需要重新上台。我们的脚本也可以处理来自不同分支的构建,因此请考虑使用您开发的任何解决方案。

最后,我们有一个专用的构建机器,每晚重建主干和维护分支机构,并发送一封有任何问题或成功完成的电子邮件。

答案 5 :(得分:1)

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

我说这个b / c我看到团队只是在服务器上运行最新版本的构建脚本,但是从来没有把它放在源代码控制中,或者当他们这样做时他们只是随机检查它。如果您使构建过程从源代码控制“获取”,它将强制您在其中保留最新和最好的构建脚本。

答案 6 :(得分:0)

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

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

这里有一些很好的解释:UppercuT

答案 7 :(得分:0)

我们的构建系统是一个makefile(或两个)。让它工作非常有趣,因为它需要在两个窗口(作为VS下的构建任务)和Linux下(作为正常的“make bla”任务)运行。真正有趣的是,构建从.csproj文件获取实际文件列表,从中构建(另一个)makefile,然后运行它。在进程中,make文件实际上称之为自己。

如果这个想法不会吓到读者,那么(或者他们疯了)或者他们可能会得到make +“你最喜欢的字符串管理器”来为他们工作。