2013-08-02 39 views
1

我做了很多搜索,但找不到适合我的问题的解决方案。CodeIgniter项目的构建和部署工作流程

我想改进我的开发流程在我的项目中使用Phing。我目前的工作流程非常简单,容易失败。我现在的情况是这样的:

机器:

  • 开发:我的机器和发展环境。
  • 测试:测试和VCS服务器。当项目准备发布时,它们被“部署”到本机进行测试,代码也被推送到本机中的Git中央存储库。
  • 生产:当项目准备好生产时,它们被“部署”到这台机器上。

目前的“部署”的过程:

变化在我的机器在feature分支的应用。当更改准备发布时,我将它合并到develop分支,然后从我的机器工作目录(而不是从本地或远程VCS)将其“部署”到测试服务器(它在物理上相同来自VCS的机器)。如果一切正常,我将develop的更改合并到master分支,然后像我为测试服务器一样“部署”到生产服务器。最后,我将developmaster分支中的本地更改推送到中央远程存储库中的通讯员分支。这些过程有时是通过手动或通过自定义shell脚本进行的。

的问题:

  • 手动部署过程是不专业的,安全的做到这一点的方式。 (1)手动提供应该部署的文件列表,(2)需要更改要部署到不同服务器的代码,(3)没有回滚任务等。
  • 我无法在构建或部署过程中执行某些任务,如测试,数据库迁移,清理缓存和日志文件,更改权限等。
  • 也就是说,它不是一个简单的单一任务,因为它应该是!

的问题:

  • Phing是一个构建工具。我也可以将它用于部署吗?
  • 我认为应该从中央远程仓库(而不是我的工作目录)'开发'和'主'分支部署(在我的情况下)应用程序代码分别到'测试'和'生产'服务器。这是正确的方法吗?
  • 考虑到前面的问题,我想使用Phing,我应该在哪里安装它?在我的开发机器还是在测试机器中?
  • 什么是“配方”更有意义,应该用于“测试”和“生产”部署策略?

    • 情况A1 - 测试部署(从本地机器运行)
      (1)连接到试验机,(2)克隆 '开发' 从中央回购到根目录的文件夹分支,(3)删除.git目录,缓存和日志文件,(4)更改一些权限,(5)运行数据库脚本,(6)将符号链接更改为当前版本以及(7)重新启动Web服务器。

    • 案例A2 - 测试部署
      从情况A1相同的步骤(从测试机运行)。

    • 案例B1 - 生产部署(从本地机器运行)
      (1)连接至加工生产时机,(2)克隆 '主' 从中央回购到根目录的文件夹分支,(3)除去。 git目录,缓存和日志文件,(4)更改一些权限,(5)运行数据库脚本,(6)将符号链接更改为当前版本以及(7)重新启动web服务器。

    • 案例B2 - 生产部署
      从案例B1相同的步骤(从试验机运行)。

  • 我应该部署整个项目还是仅部署已更改的文件?什么更好更安全?

  • 我的开发机器上应该有一个构建过程来运行测试,质量保证和缩小工具,还是应该在测试服务器上运行?
  • 我应该手动运行部署策略还是作为服务器中的Git挂钩?

回答

1

个人我的工作流程是类似这样的:在一个特性分支和测试 http://marcelog.github.io/articles/ci_jenkins_hudson_continuous_integration_php_phing.html

  • 我的代码在本地。
  • 当im准备就绪时,我合并到CI(持续集成)分支并推送
  • jenkins看到CI的新提交并自动在我们的测试服务器上构建回购并运行所有单元测试。如果单元全部通过,则生成文档并将结果通过电子邮件发送给我。
  • 通常,我然后在测试服务器上运行一些手动测试。
  • 如果一切看起来不错,我有一个jenkins部署脚本,将CI分支合并到master中,使用新生成的文档更新/ docs /文件夹,然后将所有内容推送到远程。最后现场服务器拉动新的变化,我收到另一封电子邮件。
  • 最后的现场手动测试,并重复。

恕我直言,我的工作流程的真正秘诀是HOOKS,HOOKS,HOOKS! jenkins为我所做的所有自动化都是基于post commit/push hooks。当我承诺CI并推送到远程服务器(github)时,jenkins通过post push hook(http://developer.github.com/v3/repos/hooks/#test-a-push-hook)发出警报。