首页 / 知识
关于msbuild:管理构建版本的最佳构建过程解决方案
2023-04-15 01:13:00

Best build process solution to manage build versions我用几个独立的应用程序运行一个相当复杂的项目。但是,它们使用了几个共享组件。所以我有一个看起来像下面的源代码树。
所有应用程序都有自己的MSBuild脚本,该脚本可生成项目及其所需的所有共享资源。我还在CruiseControl控制的持续集成构建服务器上运行这些构建。 部署应用程序后,会将它们部署在多台服务器上以分配负载。这意味着跟踪每个不同服务器上部署的构建/修订版本非常重要(我们需要在DLL版本中拥有当前版本,例如" 1.0.0.68")。 同样重要的是,能够重新创建一个修订版本/内部版本,以便在某些事情无法按预期进行时回滚(是的,发生了……)。今天,我们正在使用SourceSafe进行源代码控制,但是如果我们能提出充分的理由(SS到目前为止,实际上对我们来说还可以),则有可能改变。 我们尝试遵循的另一个原则是,只有我们进一步部署的集成服务器才能构建和测试这些代码。 " CrusieControl构建标签"解决方案 我们对于解决上述问题有一些想法。首先是让持续集成服务器构建并在本地部署项目并对其进行测试(现在可以这样做)。您可能知道CruiseControl的成功构建会生成一个构建标签,而我想我们可以以某种方式使用它来设置可执行文件的DLL版本(因此,构建标签35会创建一个类似" 1.0.0.35"的DLL)?想法也是使用此构建标签来标记整个源代码树。然后,我们可能可以通过该标签签出并稍后重新创建构建。 标记整个树的原因不仅是要包括实际的应用程序代码(位于源树中的一个位置),还包括所有共享项(位于树中不同位置)。因此,成功构建"应用程序A"将以标签" ApplicationA35"标记整个树。 但是,在尝试重新创建此版本并在部署之前设置DLL版本时可能会出现问题,因为我们将无法再使用CruiseControl生成的版本标签。如果所有CrusieControl构建标签在所有项目中都是唯一的,我们只能使用数字进行标记,但事实并非如此(应用程序A和B都可以同时位于构建35上),因此我们必须在标签。因此,SourceSafe标签为" Application35"。一旦构建了构建35,我该如何重新创建构建34并将DLL版本号设置为1.0.0.34? "修订号"解决方案 有人告诉我,例如Subversion在每次签入时都会为整个源代码树创建一个修订号-是这种情况吗? SourceSafe有类似的东西吗?如果正确的话,那就是获取最新的修订版本号并在CruiseControl服务器上构建。然后可以使用修订号来设置DLL版本号(例如" 1.0.0.5678")。我想如果需要的话,我们可以为Subversion获得这个特定的修订版,然后该版本将包括该应用程序和所有共享项,以便能够从过去重新创建特定的版本。这项工作是否可行,也可以使用SourceSafe来实现吗? 总结 因此,两个主要要求是: 那么您将如何解决呢?您首选的方法是什么?如何解决(或者您有完全不同的想法?)? **请提供详细答案。 ** 额外的问题修订号和内部版本号有什么区别?何时真正需要两者? 您的方案在VSS中是合理且可以实现的(尽管我建议您考虑使用替代方案,但VSS确实是过时的产品)。 对于您的" CI"构建-您需要进行版本控制,以查看具有"版本"任务的MSBuild社区任务项目。通常,您在源代码树中将有一个" Version.txt",并且在开发人员控制Major.Minor.Release.Revision数字时,MSBuild任务将增加" Release"数字(这是我的客户想要的)。如果愿意,可以使用修订。 然后,您将具有" FileUpdate"任务来编辑具有该版本的AssemblyInfo.cs文件,并且您的EXE和" DLL"将具有所需的版本。 最后,VSSLabel任务将适当地标记所有文件。 对于" Rebuild"构建-您将修改" Get"以从该Label获取文件,显然不执行" Version"任务(因为您正在选择要构建的版本),然后FileUpdate任务将使用该版本号。 奖励问题: 这些都是"您想如何使用它们"-我将使用内部版本号,以及内部版本号,这就是我要增加的内容。如果您使用的是CI,则将有很多构建-绝大部分都不打算在任何地方进行部署。 主要和次要是不言而喻的-但是我一直将修订版本用作"修补程序"指示器。我打算发布一个" 1.3"版本-实际上是一个带有1.3.1234.0版本的产品。在1.4上工作时-我发现一个错误-需要1.3.2400.1的热修复。然后当1.4准备好时-会说1.4.3500.0 结果是cc.net发布的内部版本中的所有程序集都具有与源代码存储库中的标签一致的相同版本号。 我需要比回应更多的空间,因为评论直接允许...
VSS的问题与该示例无关(尽管我认为"标签"功能的实施效率不高...) 这是VSS的一些问题
1)基本上不可能分支 对于4-问题是,VSS是通过将整个存储库在文件系统中表示为"平面文件"来实现的。当存储库超过一定大小(我相信是4GB,但我对该数字不确定)时,您就有机会"腐败"。随着规模的增加,腐败的可能性会越来越大,直到它几乎可以确定为止。 因此,请查看您的存储库大小-如果您正在使用千兆字节-我强烈建议您开始计划更换VSS。 无论如何," VSS Sucks"的google命中了3万次。。。我想,如果您确实开始使用替代品,您将意识到这是值得的。 UppercuT可以通过自定义打包任务来完成所有这些工作,以拆分应用程序。要获得源代码的版本号,您可以考虑使用Subversion。 它也非常容易上手。 http://code.google.com/p/uppercut/ 这里有一些很好的解释:UppercuT |
最新内容
相关内容
linux脚本多个命令?
linux脚本多个命令?,系统,工作,标准,服务,命令,软件,管理,连续,电脑,设备,linux脚本如何一键授权并执行1、chmod u+x file,如果只给文件所有者linux脚本注释命令?
linux脚本注释命令?,代码,系统,工作,名称,地方,脚本,命令,信息,状态,简介,linux脚本里的#! 是什么意思1、方法一:切换到shell脚本所在的目录(此脚本运行linux命令?
脚本运行linux命令?,系统,环境,工具,工作,位置,底部,代码,发行,官网,终端,linux下shell脚本命令PS1 主提示符,在特权用户下,默认的主提示符是#,在linux命令下写脚本?
linux命令下写脚本?,服务,系统,环境,代码,名称,命令,脚本,发行,在线,情况,三个简单Linux的shell脚本程序编写Shell编程实战 实现文件备份 文件linux把命令变成脚本?
linux把命令变成脚本?,系统,环境,工作,脚本,命令,信息,基础,代码,文件,变量,如何编写简单的Shell脚本文件之Linux的基本操作1、在开始Shell编脚本调用linux命令?
脚本调用linux命令?,代码,系统,工作,底部,脚本,位置,环境,行用,官网,标准,typescript脚本中怎样运行Linux命令?1、Script可用于记录当前用户的linux命令创建项目组?
linux命令创建项目组?,管理,密码,项目,命令,系统,位置,文件,用户组,用户,文件夹,linux命令中用root用户新建一个user1用户,新建一个group1的组linux脚本命令输信息?
linux脚本命令输信息?,系统,信息,代码,脚本,数据,工具,发行,命令,变量,文件,linux下shell脚本命令shell变量调出命令。linux中的shell脚本有多linux上启动脚本命令?
linux上启动脚本命令?,服务,状态,系统,代码,脚本,工作,周期性,命令,文件,方法,Python脚本在Linux下如何自启动与定时任务的实例详解Linux在启复制项目的linux命令?
复制项目的linux命令?,系统,项目,文件,命令,目录,源文件,语法,选项,目标,功能,在Linux操作系统中复制文件或目录时使用的命令是()。1、在Linuxlinux下编写脚本命令?
linux下编写脚本命令?,代码,时间,工具,标准,系统,实战,平台,最新,网站,文件,linux写脚本,需要ls只显示前10个文件,怎么实现?在linux中如果用lslinux定时器脚本命令?
linux定时器脚本命令?,系统,代码,时间,工具,工作,定期,周期性,异常,任务,脚本,Linux设置定时任务打开终端窗口,并使用 crontab -e 命令编辑当前