2010-11-24 117 views
7

我只想讨论我们的部署策略并找出其中的差异。过程是这样的部署策略,PHP + SVN

- >开发完成特定版本

- >所有开发者提交其档案干路

- >比较使用蟾蜍数据库模式和迁移的变化

- >创建于SVN

一个新的分支

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

- >英里nify的JS,CSS

- >上传到临时服务器

- >执行测试周期

- >修正错误的分支,并验证它们

- >再缩小的JS, CSS [如有需要]

- >上传到生产服务器

- >当我说的上传,这意味着通过SSH上传文件到 在/ var/www/html等文件夹

- >先上传JS,CSS,图像

- >然后上传PHP文件

- 上传>中排除目录,如用户上传图片等

- >执行测试周期

- >修正错误并重新上传(可能需要重新缩小 - 几个文件)

- >验证错误

- >验证完成

- >提交分支使用svn

- >变更合并回主干

- >提交干线[此部署周期中,没有人提交任何文件中继]

该过程非常复杂,需要很多关注。

有关我们如何改进它的任何建议?

+0

开发人员是否至少每天都会提交。使用模式管理器来自动化DB更改并在VCS中对其进行版本管理。使用持续集成服务器和Phing等构建工具。看看周围。这些话题已经在之前讨论过了。 – Gordon 2010-11-24 08:10:54

回答

2

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

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

  1. Init存储库。始终有一个用于生产和测试结账的独特用户。这允许在紧急情况下从活动服务器返回到主干的独特提交。
  2. Devs开发并提交。版本标有内部版本号,以及标签为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 accessable,以及把后面的.htaccess文件。 Apache被配置为不提供.svn目录。

0

如果你使用单元测试(如硒),你可以使用一个构建工具,脚本这一切

如果没有,我只想脚本以下步骤:

  • 使用SVN导出(去除 。SVN文件夹,等等)
  • 再缩小JS,CSS
  • 上传到分段服务器

  • 再缩小的JS,CSS [如果需要的话]
  • 上传到生产服务器
  • 当我说上传时,它意味着通过SSH上传文件到/ var/www/html文件夹
  • 第一个uploa d JS,CSS,图像
  • 然后上传PHP文件
  • 上传过程中排除,如用户目录上传图片等

,因为你已经在分支与合并,你应该保持你的躯干应始终具有最新功能的稳定版本。 终于,TAG您的版本

+0

如何在上传时实现原子性?因为在上传过程中网站出现故障的可能性很大。我应该上传到其他文件夹吗?然后将它们复制到服务器上?操作很少优化,但可能会产生自己的问题,如设置权限等。 – Ahmad 2010-11-24 07:29:54

+0

干线只应与100%工作分支合并。你可以在trunk和当前分支之间导出已更改的文件,以创建一组要上传的文件 – davidosomething 2010-11-24 07:32:48