或者,实际上建立一个构建过程,当没有多少人开始构建时。
目前,这正是我的团队面临的情况。我们主要进行网络应用程序开发(但目前没有桌面开发)。即使使用我们适度的应用程序,软件部署仍然难以操作,而且我在这两年(我和公司)的一部分中已经出现了太多问题。现在是时候做点什么了,结果是我们能够用一块石头杀死两只Joel Test鸟(每日构建和一步构建,两者都不以任何形式存在)。
我在这里所得到的是对我需要做的事情或者思考的事情的一般性见解,从那些从事软件开发的时间超过我的人,也有更大的脑子。我相信大多数人目前都会在测试版中发布。
相关工具: 视觉构建 Source Safe 6.0(我知道,但我现在无法做任何关于我们是否使用Source Safe的事情。这可能是我战斗的下一场战斗。)
暂时,我有一个Visual Build项目可以做到这一点:
我仍然需要在Visual Build中哄骗一些日志记录,但是我还没有达到我需要这样做的程度。
有没有人有任何建议或建议?我注意到,我们目前没有使用部署项目。它会删除我假设的这个构建中必需的一些步骤(比如web.config交换)。
答案 0 :(得分:18)
在承担从未进行过自动构建过程的项目时,更容易采取步骤。不要试图一次吞下太多,否则会感到压力很大。
希望这有帮助。
答案 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)
我们的构建系统是一个makefile(或两个)。让它工作非常有趣,因为它需要在两个窗口(作为VS下的构建任务)和Linux下(作为正常的“make bla”任务)运行。真正有趣的是,构建从.csproj文件获取实际文件列表,从中构建(另一个)makefile,然后运行它。在进程中,make文件实际上称之为自己。
如果这个想法不会吓到读者,那么(或者他们疯了)或者他们可能会得到make +“你最喜欢的字符串管理器”来为他们工作。
答案 7 :(得分:0)