CodeIgniter项目的构建和部署工作流程

时间:2013-08-02 01:31:44

标签: php git deployment workflow phing

我做了很多搜索,但找不到适合我问题的解决方案。

我希望使用Phing在我的项目中改进我的开发工作流程。我目前的工作流程非常简单,容易失败。我目前的情况如下:

机器:

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

当前的“部署”流程:

应用程序更改在我的计算机上的feature分支中进行。当更改准备发布时,我将其合并到develop分支,然后将其从我的机器工作目录(不是从本地或远程VCS)“部署”到测试服务器< / strong>(它与VCS在物理上是同一台机器)。如果一切正常,我将更改从develop合并到master分支,然后我将其“部署”到生产服务器,就像我对测试服务器一样。最后,我将developmaster分支中的本地更改推送到中央远程存储库中的通信分支。这些过程有时是手动完成的,也可以通过自定义shell脚本完成。

问题:

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

问题:

  • Phing是一个构建工具。我也可以用它进行部署吗?
  • 我认为应该将应用程序代码(在我的情况下)从中央远程存储库(而不是从我的工作目录)的'develop'和'master'分支部署到'testing'和'production'服务器。这是正确的方法吗?
  • 考虑到上一个问题并且我想使用Phing,我应该在哪里安装它?在我的开发机器或测试机器中?
  • 哪些“食谱”更有意义,我应该用于“测试”和“生产”部署策略吗?

    • 案例A1 - 测试部署(从本地计算机运行)
      (1)连接到测试机,(2)克隆'develop'分支从central repo到webroot文件夹,(3)删除.git目录,缓存和日志文件,(4)更改一些权限,(5)运行数据库脚本, (6)将符号链接更改为当前版本,并(7)重新启动webserver。

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

    • 案例B1 - 生产部署(从本地机器运行
      (1)连接到produciton机器,(2)克隆'master'分支从central repo到webroot文件夹,(3)删除.git目录,缓存和日志文件,(4)更改一些权限,(5)运行数据库脚本, (6)将符号链接更改为当前版本,并(7)重新启动webserver。

    • 案例B2 - 生产部署(从测试机运行)
      与案例B​​1相同的步骤。

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

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

1 个答案:

答案 0 :(得分:1)

我个人的工作流程与此类似: http://marcelog.github.io/articles/ci_jenkins_hudson_continuous_integration_php_phing.html

  • 我在功能分支中编码并在本地测试。
  • 当我准备就绪时,我合并到CI(持续集成)分支并推送
  • jenkins看到对CI的新提交,并在我们的测试服务器上自动构建repo并运行所有单元测试。如果单位全部通过,则生成文档并将结果通过电子邮件发送给我。
  • 通常,我会在测试服务器上运行一些手动测试。
  • 如果一切看起来都很好我有一个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)收到警报。