【问题标题】:deployment strategies, PHP + SVN部署策略,PHP + SVN
【发布时间】:2010-11-24 07:03:38
【问题描述】:

我只想讨论我们的部署策略并找出其中的差异。流程是这样的

-> 特定版本的开发完成

-> 所有开发者都将他们的文件提交到主干

-> 使用 TOAD 比较数据库模式并迁移更改

-> 在 SVN 上新建一个分支

-> 使用 SVN 导出(删除 .svn 文件夹等)

-> 缩小 JS、CSS

-> 上传到登台服务器

-> 执行测试循环

-> 修复分支上的错误并验证它们

-> 重新缩小 JS、CSS [如果需要]

-> 上传到生产服务器

-> 当我说上传时,它意味着通过 SSH 上传文件到 /var/www/html 文件夹

-> 先上传js、css、图片

->然后上传php文件

->在上传过程中排除用户上传的图片等目录

-> 执行测试循环

-> 修复错误并再次上传(可能需要重新缩小 - 一些文件)

-> 验证错误

->验证完成

-> 提交分支到 svn

-> 将更改合并回主干

-> commit trunk [在此部署周期内,没有人将任何文件提交到 trunk]

这个过程真的很复杂,需要很多注意力。

对我们如何改进它有什么建议吗?

【问题讨论】:

  • 让开发人员至少每天提交一次。使用模式管理器自动迁移数据库更改并在您的 VCS 中对其进行版本控制。使用持续集成服务器和 Phing 等构建工具。看看周围。这些话题之前已经讨论过。

标签: php svn deployment minify


【解决方案1】:

我使用了以下部署路径。它消除了您将文件重新上传到不同目录的许多需求。初始设置后,您要做的最复杂的工作是在每个测试位置执行“svn update”命令。

此设置假定您使用配置文件来指向资产、图像和 css 等目录。

  1. 初始化存储库。始终拥有唯一的用户进行生产和测试结账。这允许在紧急情况下从实时服务器向主干进行独特的提交。
  2. 开发人员开发和提交。构建被标记为构建编号,以及在应该准备好项目时为 LIVE 标记。
  3. 在测试服务器上进行结帐。如果一切顺利。 #dev.example.com/~test/project/
  4. svn 更新到生产服务器上的测试目录。 #example.com/~test/project
  5. svn 将生产服务器上的主项目目录更新为 LIVE 标记。 #example.com
  6. 如果您在第 3 步到第 5 步中有任何异常,请返回第 2 步。

所有项目都有一个配置文件,它允许设置开发数据库、共享图像等的路径。config.dist.php 可以很好地用作命名模式。然后每次结帐将 config.dist.php 复制到 config.php。这允许在没有 SVN 冲突的情况下进行许多配置。

每个配置文件通常都有一些代码,例如

<?php
    #hopefully, your project can leave these first two constants set to '', because relative paths work for everything
         define('localPath', '/home/www/projectName');
         define('baseURL', 'http://example.com/~projectName');

    #if you want to write everything over a shared filesystem for instance, uploads.
         define('localAssetsDirectory', '/sharedFileSystem/localPath');

    #if you want to include a shared assets directory
         define('assetsURL', 'assets/images');

    #OR if you want to host assets in one location.
         define('assetsURL', 'http://assets.example.com/images/'    
 ?>

生产和开发服务器上的所有测试版本都只能通过受限 ips 访问,并且放在 .htaccess 文件后面。 Apache 配置为不提供 .svn 目录。

【讨论】:

  • 是的..我认为这个模型是有道理的,我在同一条线上思考..我们可以在我们的办公室有一个 svn 服务器..生产服务器和登台服务器从 svn 更新main repo .. 另外,我们已经有这样的配置文件 .. 感谢您的回复 :)
  • +1,你应该怎么做!还允许跨负载平衡服务器进行复制,只需在每个其他服务器上执行 svn update
【解决方案2】:

如果您正在使用单元测试(例如 Selenium),您可以使用构建工具编写所有这些脚本

如果没有,我将编写以下步骤:

  • 使用 SVN 导出(删除 .svn 文件夹等)
  • 缩小 JS、CSS
  • 上传到登台服务器

  • 重新缩小 JS、CSS [如果需要]
  • 上传到生产服务器
  • 当我说上传时,是指通过 SSH 将文件上传到 /var/www/html 文件夹
  • 先上传js、css、图片
  • 然后上传php文件
  • 在上传过程中排除用户上传的图片等目录。

由于您已经进行了分支和合并,因此您应该让您的主干始终是具有最新功能的稳定版本。 最后,标记你的版本

【讨论】:

  • 上传时如何实现原子性?因为在上传过程中网站很可能会崩溃。我应该上传到其他文件夹吗?然后将它们复制到服务器上?该操作几乎没有优化,但它可能会产生自己的问题,如设置权限等。
  • trunk 只能与 100% 工作的分支合并。您可以导出主干和当前分支之间更改的文件以创建一组文件上传
猜你喜欢
  • 1970-01-01
  • 2014-11-23
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 2012-06-25
  • 2021-06-19
相关资源
最近更新 更多