Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
部署策略,PHP+;SVN_Php_Svn_Deployment_Minify - Fatal编程技术网

部署策略,PHP+;SVN

部署策略,PHP+;SVN,php,svn,deployment,minify,Php,Svn,Deployment,Minify,我只想讨论一下我们的部署策略,找出其中的差异。过程是这样的 ->特定版本的开发完成 ->所有开发人员都将其文件提交到主干 ->使用TOAD比较数据库模式并迁移更改 ->在SVN上创建新分支 ->使用SVN导出(删除.SVN文件夹等) ->缩小JS、CSS ->上载到临时服务器 ->执行测试循环 ->修复分支上的错误并验证它们 ->重新缩小JS、CSS[如果需要] ->上载到生产服务器 ->当我说上传时,它意味着通过SSH将文件上传到 /var/www/html文件夹 ->首先上传js,css,图

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

->特定版本的开发完成

->所有开发人员都将其文件提交到主干

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

->在SVN上创建新分支

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

->缩小JS、CSS

->上载到临时服务器

->执行测试循环

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

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

->上载到生产服务器

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

->首先上传js,css,图片

->然后上传php文件

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

->执行测试循环

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

->验证错误

->验证完成

->将分支提交给svn

->将更改合并回主干

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

这个过程非常复杂,需要大量的关注


关于如何改进它有什么建议吗?

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

如果没有,我将只编写以下步骤的脚本:

  • 使用SVN导出(删除.SVN文件夹等)
  • 缩小JS、CSS
  • 上载到临时服务器

  • 重新缩小JS、CSS[如果需要]
  • 上载到生产服务器
  • 当我说上传时,它意味着通过SSH将文件上传到/var/www/html文件夹
  • 首先上传js,css,图片
  • 然后上传php文件
  • 在上传过程中,排除用户上传图片等目录
因为您已经在进行分支和合并,所以应该保持主干始终是具有最新特性的稳定构建。
最后,标记您的发布

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

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

  • 初始化存储库。始终为生产和测试签出指定唯一的用户。这允许在紧急情况下从实时服务器向主干进行唯一的提交
  • 开发人员开发并提交。构建被标记为构建编号,当它们应该准备好项目时,还被标记为LIVE
  • 签出是在测试服务器上进行的。如果一切顺利#dev.example.com/~test/project/
  • svn更新到生产服务器上的测试目录#example.com/~test/project
  • svn更新到生产服务器上的主项目目录以激活标记#example.com
  • 如果在步骤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/'    
     ?>
    

    上传时如何实现原子性?因为在上传过程中,网站完全有可能崩溃。。我应该上传到其他文件夹吗?然后在服务器上复制它们?该操作几乎没有优化,但可能会产生自身的问题,如设置权限等。主干只能与100%的工作分支合并。您可以在主干和当前分支之间导出已更改的文件,以创建一组要上载的文件,并让开发人员至少每天提交一次。使用架构管理器自动迁移数据库更改并在VCS中对其进行版本设置。使用持续集成服务器和Phing之类的构建工具。看看周围吧。这些话题以前已经讨论过了。是的。。我认为这种模式是有道理的,我的想法是一致的。。我们可以在办公室里安装一台svn服务器。。生产服务器和暂存服务器从主repo获取svn更新。。另外,我们已经有了这样的配置文件。。谢谢你的回复:)+1,这正是你应该做的事情!还允许跨负载平衡的服务器进行复制,只需在每个其他服务器上执行svn更新即可