我做了很多搜索,但找不到适合我的问题的解决方案。
我想在我的项目中使用 Phing改进我的开发工作流程。我目前的工作流程非常简单,容易失败。我目前的情况如下:
机器:
- Dev:我的机器和开发环境。
- 测试:测试和 VCS 服务器。当项目准备好发布时,它们被“部署”到这台机器上进行测试,并且代码也被推送到这台机器上的 Git 中央存储库。
- 生产:当项目准备好生产时,它们被“部署”到这台机器上。
当前的“部署”流程:
应用程序更改是在我的机器中的一个feature
分支中进行的。当更改准备好发布时,我将它合并到develop
分支,然后我将它从我的机器工作目录(而不是从本地或远程 VCS)“部署”到测试服务器(它与 VCS 物理上是同一台机器)。如果一切正常,我将更改从分支合并,然后develop
以与测试服务器相同的方式master
将其“部署”到生产服务器。最后,我将本地更改develop
和master
分支推送到中央远程存储库中的对应分支。这些过程有时是手动或通过自定义 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 挂钩运行?