草庐IT

php - SVN网站开发部署解决方案

coder 2024-04-15 原文

情况是这样的:我们有多名具有不同程度命令行经验的开发人员,我们正在为我们的网站整合一个部署解决方案。生产环境是2个SUSE Linux boxes。开发环境也是SUSE Linux box。每个开发人员在他们的主目录中都有/将有一个 SVN 树的副本用于开发和测试。

目标是拥有一个易于使用且易于恢复的发布系统,该系统可与多个生产服务器一起使用。如果非网络开发人员(仍然是不在网络世界中的编码人员)也可以轻松恢复任何网站,那将是一个奖励。在理想情况下,发布就像在您要发布的网站上运行单个命令一样简单。此命令将更新生产服务器并在其唤醒时留下恢复路径。

我们目前的部署解决方案有点笨拙,很难恢复,而且速度很慢。我们目前使用 SVN checkin 所有文件。然后运行一个脚本,基本上在 SVN 中创建一个标签。然后运行第二个脚本,该脚本进入 2 个生产服务器中的每一个并运行“svn up”。

有什么建议吗?

最佳答案

我是一个 .net 专家,因此在 Windows 世界中工作...话虽如此,但我每天使用的管理构建过程的技术都来自您的世界! (Linux/java 技术在括号中,但我也为 Windows 读者提供了它们的等效技术)我使用 CruiseControl.NET ( CruiseControl ), VisualSVN ( SVN ), Tortoise , 和 NAnt ( Ant ) 来满足我所有的构建需求。

我的所有构建通常在 checkin 时自动推送和标记。这是通过 CruiseControl 完成的,因为它监视我的源代码控制(SVN 或 SubVersion)。当 CruiseControl (CC) 发现新代码已 checkin 时,它将执行一个 CC 项目,该项目依次调用构建服务器上的 Ant 脚本。

Ant 脚本在一个公共(public)构建中为我做了几件事情。它将检查最新代码的副本并将其带到构建服务器。然后它将构建代码以确保至少可以编译。然后它设置我的数据库的干净副本并执行任何 sql 脚本以将该基线数据库构建到当前版本。然后我运行我所有的单元测试项目。然后我运行集成测试,其中包括测试我的存储库层以确保代码仍然与我的后端保持一致(我通常在我的项目中使用 ORM,所以它们很少不同步......但这是一个很好的步骤进行中)。一旦所有测试都通过(或失败),我将数据库回滚到干净状态并执行脚本以将其升级到当前版本(这很重要,因为它为团队提供了一个干净的数据库,可以在单击时进行开发一个按钮)。如果构建成功,那么我会将代码部署到开发服务器(我也可以一键部署到我的登台服务器和生产服务器)。如果你想在每次 checkin 时标记你的代码库,你也可以在这里做。

完成所有这些后,我想使用 NDepend 对我的代码进行一些分析。 , NDoc , 和 NCover . NDepend 是一种代码分析工具,用于确保事物在架构上是正确的,命名标准是它们应该的,以及更多。 NDoc 提取所有代码注释并为我的代码创建 MSDN 风格的文档。 NCover 告诉我我的代码是否有适当的单元测试覆盖。

然后,我编写了一个自定义 Ant 任务,该任务针对各种//TODO 和//CodeDebt 标记解析我的所有代码,以生成另一个报告来告诉我(通常在冲刺结束时)有多少废话在我的代码库中累积。然后可以将其纳入下一个冲刺。

所有这些报告要么包含在发出的构建电子邮件中,要么链接得过于恰当。

请记住,以上所有操作都会在每次签到时发生...并且无需任何人点击一个按钮!这才是真正的持续集成,应该成为每个构建大师的目标。

CruiseControl 有一个基于 Web 的控制台,它还允许非 Web 开发人员(任何人)进入并执行此推送,而无需 checkin 代码...称为强制构建。

有了这个框架,只要一切都在版本控制之下,您也可以轻松地回滚推送。您将需要另一个 Ant 脚本来执行相同的过程,但有一个额外的首要任务,因为它必须获取最新版本的代码而不是最新版本的代码才能执行构建过程。所有 Ant 任务都可以在不同的执行目标中重复使用。

关于php - SVN网站开发部署解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1039741/

有关php - SVN网站开发部署解决方案的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  3. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  4. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  5. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  6. ruby - Ping ruby 网站? - 2

    在Ruby中可以使用哪些替代方法来ping一个ip地址?标准库“ping”库的功能似乎非常有限。我对在这里滚动我自己的代码不感兴趣。有没有好的gem?我应该接受它并忍受它吗?(我在Linux上使用Ruby1.8.6编写代码) 最佳答案 net-ping值得一看。它允许TCPping(如标准ruby​​ping),但也允许UDP、HTTP和ICMPping。ICMPping需要root权限,但其他则不需要。 关于ruby-Pingruby网站?,我们在StackOverflow上找到一个类

  7. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  8. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  9. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  10. ruby-on-rails - Ruby on Rails 可以部署在 Azure 网站上吗? - 2

    我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/

随机推荐