2

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

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

机器:

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

当前的“部署”流程:

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

问题:

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

问题:

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

    • 案例 A1 - 测试部署(从本地机器运行
      (1)连接到测试机器,(2)从中央仓库克隆“开发”分支到 webroot 文件夹,(3)删除 .git 目录、缓存和日志文件,(4)更改一些权限,(5) 运行数据库脚本,(6) 将符号链接更改为当前版本和 (7) 重新启动网络服务器。

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

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

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

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

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

1 回答 1

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 )收到警报.

于 2013-08-02T15:40:44.003 回答